等待功能不停

时间:2015-03-23 16:58:01

标签: c

如何在不停止调用进程的情况下获取子(由fork()生成)info(使用其中一个wait函数)? (用c语言)

    while((waitpid(p , &i , 0) > 0))
    {
        continue;
    }

请帮助

1 个答案:

答案 0 :(得分:0)

waitpid()函数的第三个参数是选项的位掩码,其中一个是(符号)WNOHANG。如果在选项中包含该选项,则waitpid()将不会阻止,即使指定的子项仍在运行。然后,您可以通过测试通过第二个参数返回的值来确定子进程是否已终止:

if (WIFEXITED(i)) {
    /* ... handle normal exit ... */
else if (WIFSIGNALED(i)) {
    /* ... handle exit because of a signal ... */
}

在实际退出之前,您无法获得孩子的退出状态或清理它,因此,如果孩子在孩子跑步时还有其他工作要做,那么只有父母才能这样做。在这种情况下,它需要定期执行waitpid()直到它发现孩子已经终止,否则它需要一些其他方式让孩子在完成时告诉它(信号,I / O,IPC)