C++ 多次等待进程完成?
C++ waiting for process to finish multiple times?
帮我纠正一下我的困惑,我在bg有一份工作运行ning,pid = 3
我想检查它是否每 10 秒完成一次(非阻塞)并打印一次 hello 并停止;
但有人声称如下:
这行不通,因为状态可以消耗只能消耗一次。
即使您在第一个 运行 之后停止,您的检查也不正确。您应该检查返回的 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
我只是对这个状态很困惑!谁能帮我理解一下,我在网上找不到任何好的和清晰的参考资料。
我认为你的代码应该可以工作。
- 您没有使用
status
参数,所以这无关紧要。
- 如果您需要区分进程结束的不同方式,例如通过信号退出与正常退出,则只需选中
status
。例如,您可以使用 WIFSIGNALED(status)
来判断它是否由于信号而退出,并且您可以使用 WEXITSTATUS(status)
来获取它传递给 exit()
. 的值
最后一条评论仅在您有其他 wait()
或 waitpid()
调用可能检测到进程退出时才重要。如果这是唯一的,你应该没问题。
如果代码在循环中,请在打印 Hello
后输入 break
以停止检查。
最好检查一下如果return_pid == -1
,表示错误,然后停止循环。如果状态以某种方式被其他等待调用接收到,您将收到错误消息,这将使您永远无法重试。
帮我纠正一下我的困惑,我在bg有一份工作运行ning,pid = 3
我想检查它是否每 10 秒完成一次(非阻塞)并打印一次 hello 并停止;
但有人声称如下:
这行不通,因为状态可以消耗只能消耗一次。
即使您在第一个 运行 之后停止,您的检查也不正确。您应该检查返回的 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
我只是对这个状态很困惑!谁能帮我理解一下,我在网上找不到任何好的和清晰的参考资料。
我认为你的代码应该可以工作。
- 您没有使用
status
参数,所以这无关紧要。 - 如果您需要区分进程结束的不同方式,例如通过信号退出与正常退出,则只需选中
status
。例如,您可以使用WIFSIGNALED(status)
来判断它是否由于信号而退出,并且您可以使用WEXITSTATUS(status)
来获取它传递给exit()
. 的值
最后一条评论仅在您有其他 wait()
或 waitpid()
调用可能检测到进程退出时才重要。如果这是唯一的,你应该没问题。
如果代码在循环中,请在打印 Hello
后输入 break
以停止检查。
最好检查一下如果return_pid == -1
,表示错误,然后停止循环。如果状态以某种方式被其他等待调用接收到,您将收到错误消息,这将使您永远无法重试。