栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何等待直到fork()调用的所有子进程完成?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何等待直到fork()调用的所有子进程完成?

我将在“ else //
parent”行之后的所有内容都移到for循环之外。在分叉循环之后,使用waitpid进行另一个for循环,然后停止计时并执行其余操作:

for (int i = 0; i < pidCount; ++i) {    int status;    while (-1 == waitpid(pids[i], &status, 0));    if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {        cerr << "Process " << i << " (pid " << pids[i] << ") failed" << endl;        exit(1);    }}gettimeofday (&second, &tzp); //stop time

我假设如果子进程无法正常退出且状态为0,则它​​没有完成其工作,因此测试未能生成有效的计时数据。显然,如果子进程 应该
被信号杀死,或者退出非零返回状态,则必须相应地更改错误检查。

使用等待的替代方法:

while (true) {    int status;    pid_t done = wait(&status);    if (done == -1) {        if (errno == ECHILD) break; // no more child processes    } else {        if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { cerr << "pid " << done << " failed" << endl; exit(1);        }    }}

这个不会告诉您顺序中哪个进程失败,但是如果您愿意,可以添加代码以在pids数组中查找并获取索引。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号