我正在用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)
.不幸的是,它阻碍了主要过程.
有没有其他方法可以获得这种信息?或者也许我错过了我已经尝试过的解决方案?