use*_*440 5 unix linux shell pid kill-process
我正在编写一个shell脚本,其中我有父进程,并且它具有由sleep &命令创建的子进程.现在我想杀死父进程,以便子进程也将被杀死.我能用以下命令做到这一点:
trap "kill $$" SIGINT
trap 'kill -HUP 0' EXIT
trap 'kill $(jobs -p)' EXIT
Run Code Online (Sandbox Code Playgroud)
这些命令正在使用kill [parent_process_ID]命令但如果我使用kill -9 [parent_process_ID]那么只有父进程将被终止.请进一步指导我实现此功能,以便当我使用任何命令终止父进程时,也应该杀死子进程.
当你单独杀死一个进程时,它不会杀死孩子.
如果希望给定组的所有进程都接收信号,则必须将信号发送到进程组.
kill -9 -parentpid
Run Code Online (Sandbox Code Playgroud)
否则,孤儿将被链接到init.
SIGHUP通过PR_SET_PDEATHSIG在prctl()syscall中指定选项,子进程可以让内核传递(或其他信号),如下所示:
prctl(PR_SET_PDEATHSIG, SIGHUP);
Run Code Online (Sandbox Code Playgroud)
详情man 2 prctl请见.
将-9signal(SIGKILL)发送到程序不会给它执行自己的信号处理程序(例如,你的trap语句).这就是孩子们不会自动被杀的原因.(一般情况下,-9让没有机会应用到清理后本身.)你必须使用一个较弱的信号,将其杀死(如SIGTERM).
详情man 7 signal请见.
| 归档时间: |
|
| 查看次数: |
18307 次 |
| 最近记录: |