首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查分叉工序是否已经完成?

如何检查分叉工序是否已经完成?
EN

Stack Overflow用户
提问于 2021-05-06 11:40:39
回答 1查看 270关注 0票数 0

我有一个具有自己pid的分叉进程的列表,我希望每x秒检查列表中的每一个作业,并报告它是否完成了(正常完成了它的工作,而不仅仅是停止了一段时间),然后将其从列表中删除。

代码语言:javascript
复制
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
        } 
    }
}

我在这里用得对吗?

一些注释:

  • ,如果这个过程完成了,我不会再问它是否已经完成,或者现在,因为我要把它从我的清单中拿出来。

如果进程仍然处于活动状态,我可能需要一次又一次地询问它是否已经完成。

EN

回答 1

Stack Overflow用户

发布于 2021-05-06 13:21:06

你问:

pid_t return_pid = waitpid(job_pid,nullptr,WNOHANG);

我在这里用得对吗?

是。如果您的目标是扫描一个子PID列表,并非阻塞地检查每个子程序is是否已经终止,则会这样做。

当然,NULL状态指针意味着您将无法判断孩子是否正常退出,但您可能并不在意。检查诸如ECHILD这样的错误是明智的,特别是在生产代码中,这可能意味着应用程序逻辑或数据已经损坏(例如,如果job_pid是荒谬的)。然而,你所拥有的可能对你的目标来说是足够好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67417406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档