2009-09-29 10 views
21

Один из моих коллег сказал мне сегодня утром, когда он убил supervisord от «kill -9», подпроцессы супервизора не убиты.Когда родительский процесс убит «kill -9», будет ли также подпроцесс убит?

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

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

ответ

16

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

+1

Вот ссылка на то, как для создания процесса зомби, если вы заинтересованы в том, как они созданы, и поэкспериментировать с тем, как они обрабатываются для вашей системы: http://www.unix.com/unix-dummies-questions-answers/100737-how- do-you-create-zombie-process.html – Klathzazt

+4

демонические, родительские, дочерние и зомбические процессы. Компьютеры рассказывают такую ​​забавную и причудливую историю. – jwarner112

23

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

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

8

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

Тем не менее, весь «процесс переднего плана группа» в «управляющий терминал» может принимать сигналы, такие как SIGINT и SIGQUIT, когда пользователь нажимает Ctrl-C, Ctrl- \, и т.д. на , что терминала. Конкретное поведение частично реализуется оболочкой входа (с помощью драйвера tty). Детали могут быть довольно сложными: посмотрите here и here

-9

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

killall -9 httpd 

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

+0

Полностью упустил точку вопроса. –

+0

Это сообщение не отвечает на вопрос, который был поставлен, и, поскольку другие ответы, вы можете удалить этот пост. –

-1

Если вы закроете терминал 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 traiste 3893 1 0 10:55 pts/1 00:00:00 sleep 4000 trainee 3906 3788 0 10:55 pts/0 00:00:00 grep --color = автоматический сон