【问题标题】:Killing forked child process along with parent? [duplicate]与父母一起杀死分叉的子进程? [复制]
【发布时间】: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


    【解决方案1】:

    这样做的一种方法是让程序将孩子的 pid 注册到一个数组中,然后当你想全部杀死它们时,只需向父母发送一个信号。信号处理程序将遍历数组并杀死所有孩子,然后杀死自己。当孩子终止时有一个处理程序很重要,这样当您尝试杀死所有孩子时,您不会杀死与该孩子之前具有相同 pid 的进程。

    【讨论】:

    • 我认为这不适合我:在当前示例中如何检索nc 的pid?
    猜你喜欢
    • 2012-01-03
    • 2014-09-16
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多