Можно ли обрабатывать SIGKILL в python?

Ахой! У меня есть оболочка python, которая собирает некоторые параметры командной строки, встраивает их подмножество в файл и вызывает подпроцесс, передавая имя файла в качестве входных данных и остальные параметры командной строки в качестве параметров. Затем он обрабатывает вывод и распечатывает его в другом формате. Подпроцесс вызывается так:

# generate cfg file
cfg_file = open(cfg_file_name, "w")
...

# call executable
command = "./%s -time %s -model %s" % (executable, args.time, args.model)
if args.branching != None:
    command += " -branching %s" % args.branching
command += " %s" % (cfg_file_name)

output = run_and_report(command)

# process output
...

Где run_and_report определяется как:

def run_and_report(cmd):

    """Run command on the shell, report stdout, stderr"""
    proc = run(cmd)
    proc.wait()
    output = "".join(map(lambda x: x.rstrip(), proc.stdout))
    return output

и run как

def run(cmd):
    """Open process"""
    return Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=True)

Сама оболочка вызывается аналогичным образом процедурой более высокого уровня, которая время от времени должна убивать некоторые из порожденных ею процессов-оболочек. Моя проблема в том, что иногда кажется, что уничтожение оболочки оставляет executable работающим, поэтому оболочка эффективно уничтожается, но основной процесс - нет. Однако, насколько мне известно, в python невозможно поймать SIGKILL, как с другими прерываниями, поэтому кто-нибудь знает способ гарантировать, что основной процесс будет уничтожен?

Спасибо,
Туннуз


person tunnuz    schedule 16.04.2013    source источник
comment
SIGKILL не может быть обработан кодом пользовательского пространства.   -  person bestsss    schedule 16.04.2013
comment
Тем не менее, есть ли способ гарантировать, что основной процесс будет убит?   -  person tunnuz    schedule 16.04.2013
comment
Вы можете посмотреть: stackoverflow.com/questions/284325/ Честно говоря, я тоже не знаю POSIX, кроме сторожевого таймера задач cron   -  person bestsss    schedule 16.04.2013
comment
кстати, я думал, что спросил: почему вы вообще используете SIGKILL. Его следует использовать только в крайнем случае, и тот, кто его использует, должен позаботиться о любом другом процессе, требующем завершения. SIGTERM или SIGINT, вероятно, то, с чем вам нужно справиться.   -  person bestsss    schedule 16.04.2013
comment
Я, вероятно, пересмотрю свой код, чтобы вместо этого использовать SIGTERM.   -  person tunnuz    schedule 16.04.2013
comment
Возможный дубликат как обрабатывать сигнал sigkill os.system внутри python?   -  person gmauch    schedule 27.03.2019