C++ 多次等待进程完成?

C++ waiting for process to finish multiple times?

帮我纠正一下我的困惑,我在bg有一份工作运行ning,pid = 3

我想检查它是否每 10 秒完成一次(非阻塞)并打印一次 hello 并停止;

但有人声称如下:

  1. 这行不通,因为状态可以消耗只能消耗一次

  2. 即使您在第一个 运行 之后停止,您的检查也不正确。您应该检查返回的 pid_t 值 和状态。

他补充说:

just remember that waitpid is waiting for state change, and if a previous call has already consumed this change, the second call will block for other changes

我只是对这个状态很困惑!谁能帮我理解一下,我在网上找不到任何好的和清晰的参考资料。

我认为你的代码应该可以工作。

  1. 您没有使用 status 参数,所以这无关紧要。
  2. 如果您需要区分进程结束的不同方式,例如通过信号退出与正常退出,则只需选中 status。例如,您可以使用 WIFSIGNALED(status) 来判断它是否由于信号而退出,并且您可以使用 WEXITSTATUS(status) 来获取它传递给 exit().
  3. 的值

最后一条评论仅在您有其他 wait()waitpid() 调用可能检测到进程退出时才重要。如果这是唯一的,你应该没问题。

如果代码在循环中,请在打印 Hello 后输入 break 以停止检查。

最好检查一下如果return_pid == -1,表示错误,然后停止循环。如果状态以某种方式被其他等待调用接收到,您将收到错误消息,这将使您永远无法重试。