当主脚本被杀死时,如何杀死Perl'系统'调用?

mmc*_*coo 6 perl kill

这些问题的过去答案都集中在分叉上:

对于这个问题,我只是询问对'系统'功能的调用.

假设我有一个名为sleep.pl的脚本:

use strict;
use warnings;
sleep(300);
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为kill.pl的脚本

use strict;
use warnings;
system("sleep.pl");
Run Code Online (Sandbox Code Playgroud)

我运行kill.pl并使用ps我找到kill.pl的进程ID并杀死它(不使用kill -9,只是普通的kill)

sleep.pl还在睡觉.

我想我的问题的解决方案涉及一个SIG处理程序,但是我需要将什么内容放入处理程序来杀死子进程?

lot*_*har 4

使用setsid使您的进程成为新的组领导者。然后,您可以向组 ID 发送终止命令并终止属于该组的所有进程。您从领导进程生成的所有进程都会继承组 ID 并属于您新创建的组。因此向该组发送击杀将杀死他们所有人。唯一棘手的事情是为了能够使用setsid,您必须关闭标准输入和输出,因为这是setsid 的要求。