如何解决与父母一起杀死分叉的孩子进程?
我正在使用基本的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 ++代码寻找同样的东西。
解决方法
执行此操作的一种方法是使程序将孩子的pids注册到数组中,然后当您要杀死它们时,只需向父级发送信号即可。信号处理程序将遍历数组并杀死所有子项,然后杀死自身。重要的是要有一个处理程序来处理一个孩子何时终止的行为,这样当您尝试杀死所有孩子时,您不会杀死具有与该孩子以前相同的pid的进程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。