我怎样才能用Perl杀死整个进程树呢?

什么是从Perl脚本中杀死一个进程及其所有subprocess的最好方法? 它应该至less在Linux和Solaris下运行,不需要安装任何额外的软件包。

我的猜测是通过parsing/ proc中的文件或parsingps的输出(在Linux和Solaris之间似乎都不可移植)来获取所有进程及其父母的列表。 然后杀死树中的所有进程(这似乎容易出现竞争状况)。

我可以忍受这种特殊情况下的竞争条件,但是我怎样才能得到进程列表呢?

Solutions Collecting From Web of "我怎样才能用Perl杀死整个进程树呢?"

如果您可以忍受杀死进程组,您可以使用以下方法:

 kill -$signum, $pgid; 

$signum是信号编号, $pgid是进程组ID。 但是,信号号码并不是非常便于携带,在这种情况下,您可以(在某些平台上;阅读perlfunc进行说明)执行以下操作(例如,发送SIGTERM ):

 kill 'TERM', -$pgid; 

CPAN有一个答案。 是的,我知道你不想安装额外的模块,但至少你可以看看实施,看看他们在做什么…

https://metacpan.org/pod/Proc::ProcessTable