Как обнаружить неработающие процессы в Linux? - PullRequest
2 голосов
/ 29 марта 2010

У меня есть родительский и дочерний процессы, написанные на языке Си. Где-то в родительском процессе сигнал HUP отправляется ребенку. Я хочу, чтобы мой родительский процесс обнаружил, умер ли ребенок. Но когда я посылаю SIGHUP, дочерний процесс становится зомби. Как я могу определить, является ли ребенок зомби в родительском процессе? Я пробую приведенный ниже код, но он не возвращает желаемый результат, так как дочерний процесс все еще существует, но он больше не работает

kill(childPID, 0);

Еще один вопрос; я могу убить ребенка зомби, не убивая родителя?

Спасибо.

1 Ответ

4 голосов
/ 29 марта 2010

из википедии :

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

Если родитель получает статус выхода, вызывая wait, waitpid и т. П., Зомби должны исчезнуть.

Вы можете определить, жив ли процесс, с помощью функций ожидания (man wait).

...