LINUX.ORG.RU

процесс становится зомби

 ,


0

1

такая картина:

запускается питон, он порождает Thread, в треде subprocess.Popen('python3 other_script.py')

теперь если убить порожденный other_script командой kill - он становится зомби
и исчезает только при завершении главного скрипта

как можно грамотно _извне_ убить субпроцесс или поток, без смерти главного скрипта?

желательно этой же командой kill, но вот она почему-то не справляется. Может сигнал надо посылать какой-то особый?



при этом если other_script.py сам завершит работу, то он сам и станет zombie и никуда не денется из списка процессов, пока не умрет родитель =\

★★★

Последнее исправление: sergey-novikov (всего исправлений: 2)

Может сигнал надо посылать какой-то особый?

Надо в родителе либо ставить SIG_IGN обработчиком для SIGCHLD, либо вызывать wait

Vinick ★★
()
Ответ на: комментарий от Vinick

он указывается при создании subprocess.Popen?

нашел пример:

signal.signal(signal.SIGINT, signal.SIG_IGN)
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)
signal.signal(signal.SIGINT, signal.SIG_DFL)

попробовал сделать так:
signal.signal(signal.SIGCHLD, signal.SIG_IGN)

но если внутри потока, перед созданием subprocess - пишет что сигналы можно использовать только в главном треде

а если перед созданием потока, то поток почему-то умирает

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

а если перед созданием потока, то поток почему-то умирает

Выясняй почему умирает.

вот такой пример нормально работает:

class MyThread (threading.Thread):
    def run(self):
        subprocess.Popen(['ls', '-l', '/tmp'])

signal.signal(signal.SIGCHLD,signal.SIG_IGN)

MyThread().start()

while 1:
    time.sleep(1)

Vinick ★★
()
Ответ на: комментарий от sergey-novikov

так явно же ересь написана. Ты сначала ставишь обработчик в SIG_IGN, а через строчку в SIG_DFL. Ты уж определись чего ты хочешь: игнорировать или принимать.

true_admin ★★★★★
()

Я думаю, это из-за того, что вы не считали код завершения

nic11
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.