c-与父进程一起杀死分叉的子进程



我正在用基本的unix命令从C执行一个shell脚本:

int pid=fork();
if (0>pid) {} //error
else if (0==pid) //child {
execv(...);
}
else { //parent
int status;
waitpid(pid, &status, 0);
}

这按预期工作,但我想创建一个看门狗,以防止执行的进程运行太长时间:

kill(pid, SIGTERM);

这也很好,但如果脚本有子进程,它们就会成为孤立进程。

让我们考虑一下这个脚本:

echo 's' | nc a.b.c.d p

nc(以及整个脚本(挂起,并且我试图从代码中删除它时,脚本将终止,但nc将成为孤儿,并将永远留在那里。

在bash中,我可以使用kill %n终止进程及其子进程。在C中做同样的事情的方法是什么?

我也可以使用pkill -TERM -P parent_pid。我正在用C/C++代码寻找同样的东西。

实现这一点的一种方法是让程序在数组中注册子级的pid,然后当你想杀死它们时,只需向父级发送一个信号。信号处理程序将遍历数组,杀死所有子级,然后杀死自己。当一个孩子终止时,有一个处理程序是很重要的,这样当你试图杀死所有孩子时,你就不会杀死一个与该孩子以前有相同pid的进程。

相关内容

最新更新