问题描述
帮我纠正我的困惑,我在 bg 中运行了一个 pid = 3 的工作
我想检查它是否每 10 秒完成一次(非阻塞)并打印一次 hello 并停止;
但有人声称:
-
这不起作用,因为状态只能使用一次。
-
即使您在第一次运行后停止,您的检查也不正确。您应该检查返回的 pid_t 值和状态。
然后他补充说:
只要记住 waitpid 正在等待状态改变,如果 前一个调用已经消耗了这个更改,第二个调用将 阻止其他更改
我只是对这种状态很困惑!有人可以帮我理解,我在网上找不到任何好的和清晰的参考。
解决方法
我认为您的代码应该可以工作。
- 您没有使用
status
参数,所以这无关紧要。 - 如果您需要区分进程结束的不同方式,例如通过信号退出与正常退出,您只需选中
status
。例如,您可以使用WIFSIGNALED(status)
来判断它是否因信号而退出,并且您可以使用WEXITSTATUS(status)
来获取它传递给exit()
的值。
最后一条评论仅在您有其他一些可能检测到进程退出的 wait()
或 waitpid()
调用时才重要。如果只有这一个,你应该没问题。
如果代码处于循环中,请在打印 break
后放置 Hello
以停止检查。
最好检查 return_pid == -1
是否指示错误并停止循环。如果某个其他等待调用以某种方式收到了该状态,您将收到错误消息,这将阻止您永远重试。