Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用SIGKILL终止父进程和子进程_Linux_Shell_Unix_Pid_Kill Process - Fatal编程技术网

Linux 使用SIGKILL终止父进程和子进程

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]则只会杀死父进程。 请指导我进一步实现此功能,以便在我使

我正在编写一个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]
则只会杀死父进程。
请指导我进一步实现此功能,以便在我使用任何命令杀死父进程时,子进程也应被杀死。

单独杀死进程时,它不会杀死子进程

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

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的函数