我有一个带有一些递归分叉实例的perl脚本。什么是从任何分叉的孩子杀死整棵树的好方法?不需要干净,{{1}}就足够了。
答案 0 :(得分:3)
当shell启动进程时,它会使它成为进程组的开始。
$ perl -MPOSIX -E'
my $pid = fork();
say getpgrp(), " ", getpid();
waitpid($pid, 0) if $pid;
'
6164 6164
6164 6167
如果没有孩子的进程组被更改,您可以向进程组发送信号。例如,以下内容会将SIGTERM
发送到与流程1234
相同的流程组中的所有流程:
kill -s TERM -1234
如果某些孩子的进程组被更改,则需要发出一个可捕获的信号(例如,不是SIGKILL
),并且具有已更改进程组的子组的父母将需要明确捕获并重新抛出向那些孩子发出信号。