Дочерний процесс, обнаруживающий смерть родительского процесса в Python - PullRequest
7 голосов
/ 17 апреля 2009

Есть ли способ для дочернего процесса в Python определить, умер ли родительский процесс?

Ответы [ 4 ]

4 голосов
/ 17 апреля 2009

Если ваш процесс Python работает под Linux и системный вызов prctl() выставлен, вы можете использовать ответ здесь .

Это может привести к отправке сигнала ребенку, когда родительский процесс умирает.

1 голос
/ 19 ноября 2010

Предполагая, что родитель жив, когда вы начинаете это делать, вы можете проверить, жив ли он еще в занятом цикле, используя psutil :

import psutil, os, time
me = psutil.Process(os.getpid())
while 1:
    if me.parent is not None:
        # still alive
        time.sleep(0.1)
        continue
    else:
        print "my parent is gone"

Не очень приятно, но ...

1 голос
/ 05 октября 2009

Единственный надежный способ, который я знаю, - это создать трубу специально для этой цели. Ребенок должен будет многократно пытаться читать с канала, предпочтительно неблокирующим способом или с помощью выбора. Если канал больше не существует (возможно, из-за смерти родителя), он получит ошибку.

1 голос
/ 17 апреля 2009

Возможно, вам очень скоро удастся прочитать идентификатор вашего родительского процесса, а затем проверить, но, конечно, это подвержено условиям гонки. Родитель, который произвел порождение, мог умереть немедленно, и даже до того, как ваш процесс выполнил свою первую инструкцию.

Если у вас нет способа проверить, относится ли данный PID к «ожидаемому» родителю, я думаю, что это трудно сделать надежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...