使用SIGKILL杀死父进程和subprocess

我正在写一个shell脚本,在其中我有父进程,它有由sleep &命令创build的subprocess。 现在我想杀死父进程,这样subprocess也会被杀死。 我可以用下面的命令来做到这一点:

 trap "kill $$" SIGINT trap 'kill -HUP 0' EXIT trap 'kill $(jobs -p)' EXIT 

这些命令正在使用kill [parent_process_ID]命令,但是如果我使用kill -9 [parent_process_ID]那么只有父进程将被终止。 请进一步指导我实现此function,以便当我用任何命令杀死父进程时,subprocess也应该被终止。

Solutions Collecting From Web of "使用SIGKILL杀死父进程和subprocess"

当你单独杀死一个进程时,它不会杀死这些孩子。

如果您希望给定组的所有进程都接收信号,则必须将信号发送到进程组。

 kill -9 -parentpid 

否则,孤儿将被链接到init

子系统可以通过在prctl()系统调用中指定选项PR_SET_PDEATHSIG来请求内核在父PR_SET_PDEATHSIG中传递SIGHUP (或其他信号),如下所示:

 prctl(PR_SET_PDEATHSIG, SIGHUP); 

详情请参阅man 2 prctl

发送-9信号( SIGKILL )给程序没有机会执行它自己的信号处理程序(例如,你的trap语句)。 这就是为什么孩子不会自动死亡。 (一般来说, -9 没有机会让应用程序自行清理。)你必须使用较弱的信号来杀死它(如SIGTERM

详情请看man 7 signal