【发布时间】:2021-07-13 06:13:10
【问题描述】:
这是我用来检查子进程是否已在 C/cC++ 语言中完成的方式:
waitpid(job.pid,&tmp,WNOHANG)>=0;
但经过一番阅读,我认为这是错误的,因为我是在询问 waitpid 是否成功完成,而不是询问进程是否完成。
我该如何解决这个问题?
【问题讨论】:
-
正如所写,它是一个不直接分配给任何东西的表达式(
tmp被分配给作为对waitpid()的调用的副作用,如果它检测到一个退出的进程) .作为if条件的一部分,它可能很有用。也许你应该使用pid_t corpse = waitpid(…);?WNOHANG意味着你经常会收到一个错误 (-1) 返回,errno将被设置为EAGAIN(这意味着你可能会在未来的电话中成功,大致 - 你会得到ECHILD如果孩子已经死了,并且已经被等待)。 -
这个函数的奇怪之处是一个很好的理由将它包装在一个你在项目中重用的函数中。仔细阅读手册页并写一次正确的内容将为您省去很多麻烦。
-
@EmanuelP 这就是我要寻求帮助的,为什么我应该将结果保存在变量中?结果意味着 waitpid 是否工作,而不是进程是否完成或仍在运行
-
@JonathanLeffler 你能告诉我它的样子吗,我还是很困惑