在父进程恢复执行之前等待所有子进程 UNIX

2024-01-20

在我的程序中,我在有限的 while 循环中分叉(并行)子进程,并对每个子进程执行 exec 。我希望父进程仅在所有子进程终止后才恢复执行( while 循环之后的点)。我该怎么做呢?

我尝试了几种方法。在一种方法中,我让父进程在 while 循环后暂停,并仅当 waitpid 返回错误 ECHILD(没有剩余子进程)时才从 SIGCHLD 处理程序发送一些条件,但我在这种方法中面临的问题甚至在父进程完成分叉所有进程之前, retStat 变为-1

    void sigchld_handler(int signo) {
        pid_t pid;
        while((pid= waitpid(-1,NULL,WNOHANG)) > 0);
        if(errno == ECHILD) {
            retStat = -1;
        }
    }

    **//parent process code**
    retStat = 1;
    while(some condition) {
       do fork(and exec);
    }

    while(retStat > 0)
        pause();
//This is the point where I want execution to resumed only when all children have finished

而不是打电话waitpid在信号处理程序中,为什么不在分叉所有进程后创建一个循环,如下所示:

while (pid = waitpid(-1, NULL, 0)) {
   if (errno == ECHILD) {
      break;
   }
}

程序应该挂在循环中,直到不再有子进程。然后它就会掉下来,程序将继续进行。作为额外的好处,循环将阻塞waitpid当孩子们跑步时,所以你在等待时不需要一个繁忙的循环。

你也可以使用wait(NULL)这应该相当于waitpid(-1, NULL, 0)。如果您不需要在SIGCHLD中执行其他操作,则可以将其设置为SIG_DFL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在父进程恢复执行之前等待所有子进程 UNIX 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • SQL SELECT * FROM XXX WHERE 数组中的列名

    我正在编写一些 SQL 代码 我熟悉语法 SELECT FROM myTable WHERE myColumn in 1 2 3 假设我正在编写一些 C 代码 我想在其中使用我使用过的 C 数组 1 2 3 我怎么做 您可以动态构建 SQL
  • 当活动被破坏时,GPS图标不会消失吗?

    作为一个尝试 GPS 东西的 Android 新手 我设法将这段代码组合在一起 它的工作原理就像我期望的那样 除了一件事 GPS 图标永远不会消失 如何让GPS图标在Activity被破坏时消失 我有 locationManager rem
  • 在 Ruby 中如何找到机器上的空闲物理内存?

    我想知道系统上有多少可用物理内存 不包括任何交换区 有没有办法在 Ruby 中获取这些信息 如果您使用 Linux 您通常使用 free 命令来查找系统上的物理内存 即 RAM 详细信息 output x free 输出将类似于以下字符串
  • 如何使用 boto3 仅检索 S3 中的 last_modified 密钥

    我只想使用 boto3 从 S3 存储桶中检索特定前缀中的 last modified 密钥 Get Today s date today datetime date today Get Objects date s3 boto3 reso
  • Angular8 i18n 用于占位符标签文本

    如何在 ngx mat select search palceholderLabel 中添加 i18n div class form group col md 6 mb lg 5 mb 4 div
  • 确保 MongoDb findAndModify 中独占读取的方法?

    我有一个 MongoDB 集合 用作作业队列 多个进程从中读取记录 使用findAndModify FindAndModify搜索记录 其中activefield 为 false 将其设置为 true 这样其他进程就不会读取同一条记录 问题
  • Excel Range 中的一维数组

    我目前正在使用以下代码填充我的数组 Securities Option Base 1 Securities Array Worksheets 3 Range A8 A SymbolCount Value 这会生成一个二维数组 其中每个地址都
  • 如何解释生成对抗网络中判别器的损失和生成器的损失?

    我正在阅读人们对 DCGAN 的实现 尤其是this one https github com carpedm20 DCGAN tensorflow在张量流中 在该实现中 作者画出了判别器和生成器的损失 如下所示 图片来自https git
  • Azure Web 作业 - 如何连接到 Azure MS SQL 数据库?

    我有一个发布到 Azure 的 MVC 网站 它使用 Azure SQL 数据库 现在我们需要运行计划任务来发送短信提醒 我的印象是 Azure Web Jobs 非常适合此任务 但在启动和运行它时遇到了一些问题 我已将控制台应用程序添加到
  • 寻找最接近 0 的数字

    我有一个整数数组 我需要找到最接近零的一个 正整数优先于负整数 这是我到目前为止的代码 public class CloseToZero public static void main String args int data 2 3 2
  • InnoSetup,在运行时更改 Uninstallable 属性行为?

    SCENARIO 我创建了一个安装程序 它将安装恶意软件应用程序以用于教育目的 该安装程序包含以下两个任务 Tasks Name hidden Description Hidden mode GroupDescription Install
  • pyqtgraph中设置背景颜色的问题

    我在 python 中使用 pyqtgraph 模块时遇到问题 当我将白色背景颜色放入 glscatterplot 时 散点就消失了 就像背景颜色添加到散点图的颜色中一样 因此一切都是白色的 这是我使用的一段代码 w gl GLViewWi
  • Gem 安装 therubyracer -v '0.11.4'?

    我几乎要疯狂地安装红宝石赛车手 我知道有很多人和我有同样的问题 我也看过这些问题 但对我来说太复杂了 因为不同的情况有不同的解决方案 而事实上 一直没有很好的办法来解决这个问题 我的问题类似于this https github com co
  • R中画圆

    我不知道为什么下面的代码没有给我完整的圆圈 而只给出了它的一部分 另外 我不知道如何在以 0 0 为中心且 r 1 和 a 2 的正方形内显示圆上或圆外的点 library plotrix n lt 1000 plot new frame
  • 如果启用 Nginx 拒绝规则,则下载 PHP 文件

    我的 Nginx 服务器已经运行了一年多 没有出现任何问题 它可以很好地为 WordPress 网站提供 HTML 和 PHP 文件 最近 wp login php 遭到了一些暴力攻击 因此我决定使用 Nginx 的拒绝所有规则来限制通过
  • 使用 pymongo 的 ReplicaSetConnection:有时会出现“IndexError:Cursor 没有这样的项目”

    我开始使用 pymongo 的 版本 2 2 1 ReplicaSetConnection 对象而不是 pymongo Connection 对象 现在 当我从数据库执行读取时 例如 if cur count 0 raise NoDocum
  • PHP PDO MySQL IN (?,?,?

    我想写一个MySQL语句 例如 SELECT FROM someTable WHERE someId IN value1 value2 value3 这里的技巧是我事先不知道 IN 中有多少个值 显然我知道我可以通过字符串操作生成查询 但是
  • s3 IAM 用户的 django-storages 需要什么权限?

    正如问题所问 锁定的 s3 IAM 用户成功使用 django storages 所需的最低权限是什么 目前我用过类似的东西 Statement Effect Allow Action s3 ListAllMyBuckets Resourc
  • django 休息错误 - AttributeError:模块“集合”没有属性“MutableMapping”

    我正在构建 Django 应用程序 它在我的机器上工作正常 但是当我在 docker 容器内运行时 它的休息框架不断崩溃 但是当我评论与休息框架的任何连接时 它工作正常 我的机器 Kali Linux 2021 3 码头机器 Raspber
  • 在父进程恢复执行之前等待所有子进程 UNIX

    在我的程序中 我在有限的 while 循环中分叉 并行 子进程 并对每个子进程执行 exec 我希望父进程仅在所有子进程终止后才恢复执行 while 循环之后的点 我该怎么做呢 我尝试了几种方法 在一种方法中 我让父进程在 while 循环