Linux 使用SIGKILL终止父进程和子进程
我正在编写一个shell脚本,其中有父进程,子进程由Linux 使用SIGKILL终止父进程和子进程,linux,shell,unix,pid,kill-process,Linux,Shell,Unix,Pid,Kill Process,我正在编写一个shell脚本,其中有父进程,子进程由sleep&命令创建。现在我希望杀死父进程,这样子进程也会被杀死。我可以通过以下命令完成此操作: trap "kill $$" SIGINT trap 'kill -HUP 0' EXIT trap 'kill $(jobs -p)' EXIT 这些命令使用的是kill[parent\u process\u ID]命令,但如果使用kill-9[parent\u process\u ID]则只会杀死父进程。 请指导我进一步实现此功能,以便在我使
sleep&
命令创建。现在我希望杀死父进程,这样子进程也会被杀死。我可以通过以下命令完成此操作:
trap "kill $$" SIGINT
trap 'kill -HUP 0' EXIT
trap 'kill $(jobs -p)' EXIT
这些命令使用的是kill[parent\u process\u ID]
命令,但如果使用kill-9[parent\u process\u ID]
则只会杀死父进程。
请指导我进一步实现此功能,以便在我使用任何命令杀死父进程时,子进程也应被杀死。单独杀死进程时,它不会杀死子进程 如果希望给定组的所有进程都接收信号,则必须将信号发送到进程组
kill -9 -parentpid
否则,孤立项将链接到init
通过在prctl()
syscall中指定选项PR\u SET\u PDEATHSIG
,子进程可以要求内核在父进程死亡时传递SIGHUP
(或其他信号),如下所示:
prctl(PR_SET_PDEATHSIG, SIGHUP);
有关详细信息,请参见
man 2 prctl
。将-9
信号(SIGKILL
)发送到程序时,程序没有机会执行自己的信号处理程序(例如,您的trap
语句)。这就是为什么孩子们不会被自动杀死。(一般来说,-9
不会让应用程序有机会自行清理。)您必须使用较弱的信号杀死它(例如SIGTERM
)
有关详细信息,请参阅。我已尝试过,但我认为我没有名为prctl的函数