LINUX.ORG.RU

Как сделать автоматическое завершение потомков убитого процесса?


0

0

Ситуация следующая:
Есть процесс - родитель. Он несколько раз делает fork()+execve(), создавая процессы - потомки. В какой-то момент процесса - родителя завершают командой kill. При этом потомки продолжают выполняться. Как сделать чтобы они тоже завершались при завершении родителя, «автоматически» ?

Гуглил, но пока самое простое решение - периодически смотреть в потомках getppid() и если его родитель стал процесс init - завершаться. Но это кажется мне очень плохим решением =(

Есть что-нибудь проще и элегантнее?

★★

Тараса Бульбу по всей видимости ты не читал :)
«Я тебя породил, я тебя и убью» :)

zJes ★★
()

>kill

ССЗБ, завершай TERM'ом, перехватывай и убивай детей.

Можно через dbus или какие-нибудь IPC организовать напоминание что «родитель еще жив»

winlogon
()
Ответ на: комментарий от winlogon

Понятно. Значит, буду так и делать. Но хотелось что-нибудь проще и надежней.

tim239 ★★
() автор топика
Ответ на: комментарий от zJes

Читал. Провинившихся детей процесс-родитель лихо убивает и сейчас, но если убить Тараса, его дети не умрут автоматически, и у Гоголя тоже.

tim239 ★★
() автор топика

>Есть что-нибудь проще и элегантнее?
в том же коде, который убивает родителя, убивать и детей. Или это делает пользователь?

nu11 ★★★★★
()
Ответ на: комментарий от nu11

Огромное спасибо, это то, что нужно!
man prctl
.....
PR_SET_PDEATHSIG (since Linux 2.1.57)
Set the parent process death signal of the calling
process to arg2 (either a signal value in the range
1..maxsig, or 0 to clear). This is the signal that
the calling process will get when its parent dies.
This value is cleared for the child of a fork(2).
.....

tim239 ★★
() автор топика
Ответ на: комментарий от winlogon

>убивай детей

только на лоре могут посоветовать убивать детей

antony986
()
Ответ на: комментарий от anonymous

man 7 signal | grep SIGCHLD
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCLD -,-,18 Ign A synonym for SIGCHLD

А мне надо было «SIGPARENT» =)

tim239 ★★
() автор топика

При смерти родителя обрывается пайп к дочернему процессу. Следовательно у него на stdin посыплются EOF-ы. Вот и сделай обработку этого.

Rapt0r
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.