Подтвердить что ты не робот

Когда родительский процесс убивается "kill -9", будет ли также подпроцесс убит?

Один из моих коллег сказал мне сегодня утром, когда он убил supervisord с помощью "kill -9", подпроцессы супервизора не убит.

Он совершенно уверен в этом, но я много раз пробовал и не обнаружил, что это происходит.

Итак, когда родительский процесс убивается "kill -9", linux гарантирует, что его подпроцессы также были убиты?

4b9b3361

Ответ 1

Вы должны сделать демоны демонов, чтобы убить их, когда отец убит (или умирает), в противном случае они будут приняты init (1).

Ответ 2

Нет, дочерние процессы не обязательно убиваются, когда родитель убит.

Однако, если у ребенка есть открытый канал, который он пишет, а родительский читает, он получит SIGPIPE, когда он попытается записать в трубу, для которого действие по умолчанию - это его убить. Часто это происходит на практике.

Ответ 3

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

Однако вся "группа процессов переднего плана" в "управляющем терминале" может принимать сигналы, такие как SIGINT и SIGQUIT, когда пользователь нажимает на ctrl-C, ctrl-\и т.д. на этом терминале. Конкретное поведение частично реализуется оболочкой входа (с помощью драйвера tty). Подробности могут быть довольно сложными: посмотрите здесь и здесь

Ответ 4

Если u закроет терминал pid, который является родительским идентификатором процесса, тогда терминал закрыт. И когда терминал закрыт, все его процессы также убиваются. Но если u создаст суб-оболочку в оболочке, тогда, если u создаст какой-либо процесс и убьет ppid этого процесса, тогда только эта суб-оболочка убивает, а их ребенок становится сиротами. Их родительский элемент становится init и pid равен 1.

[стажер @SIPL ~] $ps -ef | grep sleep trainee 3893 3870 0 10:55 pts/1 00:00:00 sleep 4000 стажер 3895 3788 0 10:55 pts/0 00:00:00 grep --color = автоматический сон [стажер @SIPL ~] $kill - 9 3870 [стажер @SIPL ~] $ps -ef | grep sleep trainee 3893 1 0 10:55 pts/1 00:00:00 sleep 4000 ученик 3906 3788 0 10:55 pts/0 00:00:00 grep --color = автоматический сон

Ответ 5

Вам просто нужно знать, какой процесс или услугу вы хотите убить. В моем случае httpd есть.

killall -9 httpd

Он убьет все дочерние процессы httpd.