2010-02-17 2 views

ответ

6

Нет, не автоматически.

Обычно, когда родитель убит, ребенку будет отправлен сигнал HUP. По крайней мере, это верно, когда родительский элемент является оболочкой. Я не уверен в том, что это бесплатно, когда ребенок был fork() ed.

Но это может быть проиграно, например, если родительский объект является оболочкой, а ребенок был запущен с использованием nohup child& или если сам ребенок объявил, что он будет игнорировать сигналы HUP.

+0

Несмотря на «да» и «нет», мой ответ и скудность не противоречат друг другу. – dubiousjim

+0

Я нахожу ваш ответ более полным. Вы всегда можете ловить сигналы и делать фанки. Таким образом, безопасно не предполагать ничего, когда дело доходит до убийства дочерних процессов, убивая родителя. – hackworks

3

man 2 kill

int kill(pid_t pid, int sig); 

Если PID больше 0, сиг должен быть направлен к процессу, чей идентификатор процесса равен PID.

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

Если не указан setpgid или аналогичная функция, дочерний процесс находится в той же группе процессов, что и ее родитель. Например, задания, запущенные вашей оболочкой, принадлежат к той же самой группе процессов, что и сама оболочка.

Таким образом kill -HUP $$ посылает SIGHUP к вашей оболочке, в то время как kill -HUP -$$ посылает SIGHUP ко всем процессам в текущей сессии, в том числе детей вашей оболочки.

0

Этот скрипт bash уничтожит себя, а дочерние процессы - противоположность nohup.

#!/bin/bash 

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat 
trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL 

# run the program given on args 
"[email protected]" 

exit $? 

Кто-нибудь знает, есть ли такое встроенное устройство?

Смежные вопросы