【发布时间】:2021-07-28 17:26:18
【问题描述】:
我有一个在后台使用自己的 pid 运行的分叉进程列表,我想每隔 x 秒检查一次列表中的每个作业并报告它是否完成(正常完成工作并且不仅停止了一段时间)然后将其从列表中删除。
void my_func()
{
auto job = jobs.begin();
while (job != jobs.end())
{
pid_t job_pid = job->pid;
pid_t return_pid = waitpid(job_pid, nullptr, WNOHANG);
if (return_pid == job_pid)
{
cout << "Finished" << endl;
//remove from list
}
}
}
我在这里正确使用 waitpid 吗?
一些注意事项:
-
如果这个过程已经完成,我不会再问它是完成了还是现在,因为我已经把它从我的列表中删除了。
-
如果该过程仍然有效,我可能需要一遍又一遍地询问它是否已完成。
【问题讨论】:
-
fork()呼叫发生在哪里? -
据我回忆,您对
waitpid的使用会检测到指定进程中的“状态更改”——不一定是完成。手册页中的 examples 提供了更符合您所追求的详细用法。
标签: c++ linux unix system-calls wait