如何在不停止调用进程的情况下获取子(由fork()生成)info(使用其中一个wait函数)? (用c语言)
while((waitpid(p , &i , 0) > 0))
{
continue;
}
请帮助
答案 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)