【问题标题】:Hanging a Child Process挂起子进程
【发布时间】:2009-02-18 10:47:23
【问题描述】:

我正在尝试测试我的系统并希望模拟子进程挂起的情况。为此,我试图将子进程附加到 GDB 并对其进行中断。但事情似乎并不像预期的那样发展。

同样,我怎么知道衍生的子进程没有进行,而是挂起?

【问题讨论】:

    标签: parent-child unix


    【解决方案1】:

    使用可以使用 SIGSTOP 挂起子进程 - 但这与子进程进入无限循环或糟糕的条件等待明显不同 - 仍然可能足够接近测试。

    要检查子进程是否挂起,您可以让它向父进程发送心跳(为此您需要某种通信通道 - 至少可能是标准输入/标准输出)。如果孩子未能发送几次心跳消息,则孩子挂起。

    【讨论】:

      【解决方案2】:

      子进程将继承在 fork 之前创建的所有管道。您可以使用它来“挂”您的孩子并让它知道何时继续。您可以让您的子进程尝试在管道上进行阻塞读取,它会阻塞(即挂起)直到父进程写入。

      您也可以使用道格拉斯提及的信号。你可以让操作系统做基本的停止/继续,或者你可以实现信号处理程序来做一些更复杂的事情(比如进入一个无限循环)。

      可以在Unix Programming FAQ 中找到这两个示例以及有关过程控制、信号处理、管道等的大量附加信息...

      您可以尝试查看 /proc 以确定您是否挂起。你可以阅读 /proc//stat 来获取很多低级进程信息,包括当前状态、进程已调度的用户/内核时间量、当前堆栈和指令指针等。 .. 结合使用,您可以尝试确定进程是否挂起。查看 proc(5) 手册页以获取有关 /proc//stat 的更多信息。

      【讨论】:

        猜你喜欢
        • 2017-02-28
        • 1970-01-01
        • 2012-09-07
        • 2016-09-23
        • 2015-07-07
        • 1970-01-01
        • 2018-11-11
        • 2013-08-18
        • 1970-01-01
        相关资源
        最近更新 更多