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

问题描述

帮我纠正我的困惑,我在 bg 中运行了一个 pid = 3 的工作

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

但有人声称:

  1. 这不起作用,因为状态只能使用一次

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

然后他补充说:

只要记住 waitpid 正在等待状态改变,如果 前一个调用已经消耗了这个更改,第二个调用将 阻止其他更改

我只是对这种状态很困惑!有人可以帮我理解,我在网上找不到任何好的和清晰的参考。

解决方法

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

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

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

如果代码处于循环中,请在打印 break 后放置 Hello 以停止检查。

最好检查 return_pid == -1 是否指示错误并停止循环。如果某个其他等待调用以某种方式收到了该状态,您将收到错误消息,这将阻止您永远重试。