【发布时间】:2020-08-23 20:49:27
【问题描述】:
我正在使用基本的 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++ 代码相同的内容。
【问题讨论】:
标签: c child-process kill