【问题标题】:How to kill process group zombies如何杀死进程组僵尸
【发布时间】:2014-06-19 16:22:34
【问题描述】:

假设,假设 main() 函数创建了第二个调用 fork() 的进程,假设这个新进程开始通过函数 makeChildren() 创建自己的子进程,循环中有一百万,疯狂的用户。 Fork() 失败,makeChildren() 返回错误。如何摆脱这些已经创建的新流程?我可以使用 killpg(getpgrp(), SIGKILL) 吗?如果我理解正确的话,这个场景中的每个进程都有相同的组 ID,不是吗?当我使用 killpg(getpgrp(), SIGKILL) 程序将立即终止,对吗?我必须使用 setpgid() 吗?我想杀死这个僵尸并在主释放共享内存、信号量等...谢谢您的任何解释。

【问题讨论】:

    标签: c linux multithreading error-handling


    【解决方案1】:

    如果父进程终止,其子进程将重新分配给init 进程。它将为他们wait,所以他们不应该成为僵尸。

    【讨论】:

    • 是的,但是当我运行这个程序时,我的系统 debian/Linux 3.14 开始卡顿,我必须重新启动它。
    • 您的进程不是僵尸进程。如果它们在父进程死亡时仍在运行,它们被称为孤儿进程,init 进程在它们最终终止时获取它们。所以你的问题不在于杀死僵尸进程。由于子进程仍在运行,因此您有很多选择:测试它们的父进程的 id 是否为 1,使用锁定文件或某种 IPC 来查看父进程是否正在运行,如果没有,则让它们终止。
    猜你喜欢
    • 2013-06-01
    • 2015-04-12
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多