小编0x4*_*450的帖子

监视进程是否已在C中终止

介绍

我正在用C编写一个监控程序,它执行fork()exec()循环.但是,我需要在不阻塞主进程(即监视程序)的情况下检查子进程是否已终止.像这样的东西:

主要过程

pid_t child_pid = fork();
if (child_pid == 0)
    exec(bar);

while (1) {
    if (the child process has finished)
        foo();
    else
        bar();
}
Run Code Online (Sandbox Code Playgroud)

我试过了什么

考虑到我有孩子pid的事实,我尝试了以下方法:

  • 发送kill电话signal 0并进行检查errno:

    if (kill(child_pid, 0) == -1 || errno == ESRCH)我认为这不是跟踪儿童过程状态的好方法,因为它不受种族条件的影响.此外它没有用,或者至少看起来如此.

  • 检查stat(2)是否proc/child_pid存在.在这种情况下,所有上述否定参数都是正确的,并且此方法较慢.

  • waitpid(2).不幸的是,它阻碍了主要过程.

这个问题

有没有其他方法可以获得这种信息?或者也许我错过了我已经尝试过的解决方案?

c monitoring fork process

7
推荐指数
4
解决办法
2455
查看次数

标签 统计

c ×1

fork ×1

monitoring ×1

process ×1