fork 和 exec 许多不同的进程,并从每个进程中获取结果

2024-01-06

我已经设法从我的应用程序中分叉并执行一个不同的程序。我目前正在研究如何等待 exec 调用的进程通过管道或标准输出返回结果。但是,我可以使用单个 fork 来创建一组进程吗?或者我是否必须多次 fork 并再次调用同一个程序?我可以获得每个不同进程的 PID 吗?我希望我的应用程序调用我当前多次调用的同一程序,但具有不同的参数:我希望同一程序的一组 8 个进程运行并通过管道返回结果。有人可以指出我正确的方向吗?我已经浏览了 linux.die 手册页,但它们的描述相当简洁和神秘。我可以找到电子书或 pdf 来了解详细信息吗?谢谢你!

pid_t pID = fork();
 if (pID == 0){
  int proc = execl(BOLDAGENT,BOLDAGENT,"-u","2","-c","walkevo.xml",NULL);
  std::cout << strerror(errno) << std::endl;
}

例如,我如何通过PID控制哪个子进程(根据参数xml文件)获得了哪个结果(通过管道或stdout),从而采取相应的行动?我是否必须将子进程封装在一个对象中,并从那里开始工作,或者我可以将它们组合在一起吗?


One Forksyscall 只创建一个新进程(一个 PID)。您应该组织一些数据结构(例如 pid 数组、父级管道末端数组等),从主程序执行 8 个 fork(每个子程序都会执行exec)然后等待孩子们。

每次 fork() 之后它都会返回一个子进程的 PID。您可以像这样存储这个 pid 和相关信息:

#define MAX_CHILD=8
pid_t pids[MAX_CHILD];
int pipe_fd[MAX_CHILD];
for(int child=0;child<MAX_CHILD;child++) {
 int pipe[2];
 /* create a pipe; save one of pipe fd to the pipe_fd[child] */
 int ret;
 ret = fork();
 if(ret) { /* parent */ 
  /* close alien half of pipe */
  pids[child] = ret; /* save the pid */
 } else { /* child */
  /* close alien half of pipe */
  /* We are child #child, exec needed program */
  exec(...);
  /* here can be no more code in the child, as `exec` will not return if there is no error! */
 }
} 

/* there you can do a `select` to wait data from several pipes; select will give you number of fd with data waiting, you can find a pid from two arrays */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fork 和 exec 许多不同的进程,并从每个进程中获取结果 的相关文章

  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • r - 如何删除 DT::datatable 中标题和正文之间的水平线

    我想删除表数据和标题之间的限制条纹 或者至少更改其颜色 我想为各自教室的老师制定一个时间表 options list pageLength 40 dom t ordering FALSE columnDefs list list class
  • 如何在 docker 容器内提供 django 秘密

    我的环境 docker 17 12 ce python 3 6 3 django 1 10 8 我有一个 Django 应用程序 我想将其容器化 尝试保持最佳实践 我遵循建议将 settings py 文件拆分为一个基本文件 然后每个阶段一
  • Grails:将插件类导入到 _Events.groovy

    我创建了一个 Grails 插件 它添加了一个自定义测试类型类 扩展GrailsTestTypeSupport 和自定义测试结果类 扩展GrailsTestTypeResult 以支持我在other的阶段test app脚本 在我的本地机器
  • 根据键值过滤Python中的嵌套字典

    如何根据键值过滤 python 中的嵌套字典 d data country US city New York state None tags US New York type country info growth rate None 我想
  • GLSL从modelviewmatrix和viewmatrix中提取modelmatrix

    由于在 GLSL 中 modelmatrix 不可用 我想知道是否可以从 gl ModelViewMatrix 和我将作为统一传递的 viewmatrix 以编程方式获取它 如果是 怎么办 谢谢你 您可以通过将模型视图矩阵与视图矩阵的逆矩阵
  • PHP 中如何连接字符串?

    我有三个字符串 str1 abc str2 定义 str3 ghi 我可以这样得到它们的值 回声 str1 str2 str3 但我听说有一种方法可以将它们连接在一起 这样我就可以不加引号地呼应它们 以及像这样连接 echo str1 st
  • 大查询 - 将 INT 转换为日期

    找不到任何解决方案 需要将格式为 20190101 的 date int 转换为格式为 2019 01 01 的 DATE 我努力了 演员表 cast 20190101 AS STRING AS 日期 FORMAT DATE F CAST
  • MVC 4 Autofac 和通用存储库模式

    我在我的 MVC 4 应用程序中利用工作单元和通用存储库模式 我试图解决的问题是为系统中的每个实体创建存储库存根 为了利用 Autofac Ioc 我必须为每个实体创建一个存储库类和接口 以便我可以在 Autofac 中注册它 应用程序启动
  • 请求已超出允许的时间限制标签:cfhttp

    我每天都面临这个问题 我有一个应用程序 它通过夜间计划作业捕获来自各种应用程序的大量数据cfhhtp打电话 请求 这里的问题是它调用 广泛的范围列表 来捕获数据 不幸的是我们无法限制范围 任务中设置的超时时间是 9000 秒 这已经相当高了
  • 列表视图与数据网格

    与使用列表视图相比 使用数据网格控件的主要优点是什么 每一项应该在什么时候使用 需要考虑的一些要点科林 埃伯 http www codeplex com site users view ColinEber已在DataGrid 与 GridV
  • 在 Gwt WindowBuilder 中编辑 CSS

    我在一个项目中使用 GWT 最近开始在 Eclipse 中使用 WindowBuilder 我在 WindowBuilder 中创建了一个新类并添加了一些小部件 所有有效的东西 但是 当我尝试编辑某些面板的 CSS 并单击编辑 styleN
  • Stylesheet_link_tag 已损坏,文件路径不起作用,我一生都无法弄清楚为什么。有任何想法吗?

    我在 Rails 3 1 中 config application rb 中的 config assets enabled 为 true 我的这些不起作用 我不知道我做错了什么 这也不起作用 图像不显示图像的缩写路径或完整路径
  • 从两个 data.frame 绘制数据时出现图例问题

    我在让 ggplot2 按我想要的方式工作时遇到了一些麻烦 基本上 我想通过将实际观察结果与近似值放在一个图中来进行比较 例如 gt library ggplot2 gt df actual lt data frame x 1 100 y
  • AssertionError [ERR_ASSERTION]:更新到 Angular 15 后编译无法取消定义

    更新至 Angular v15 跑步时ng test我收到以下错误 Generating browser application bundles phase setup node internal process promises 288
  • NHibernate使用Firebird自己的生成器

    在 Firebird DB 中有自己的生成器 称为GEN PATIENT ID我想将 ID 的生成留在 DB 端 而不是 NHibernate 和 FluentNHibernate 通过此链接 我将覆盖默认的 Fluent 行为 例如thi
  • 如何在 XAML 中引用图标资源文件引用

    我正在尝试获取一个在 XAML 中显示图标的按钮 最初我想粘贴一个字符 但 vb Express 2008 不会识别它是一个符号 因为它不是一个常规字符 然后我创建了一个图标并尝试设置按钮图像属性来引用它 但这不存在 所以更痛苦 现在我已经
  • 将 java.lang.Iterable 视为 Freemarker 中的 #list 表达式

    我有一个 java lang Iterable 实际上是一个 com google gson JsonArray 实例 我想使用 freemarker 2 3 16 枚举列表中的项目 assign sports controller spo
  • 在 IE 中打印的所有 HTML 页面底部的 HTML 页脚

    我被要求在 html 网页打印的每个页面的底部添加页脚 而不是浏览器上的实际页面 你们知道有什么办法吗 它应该可以在 IE 上运行 并且只有 IE 就可以 我尝试使用固定底部 但内容与页脚重叠 我尝试使用 javascript 来计算空间并
  • 如何使用 Amazon SNS 和 Python 以及 boto3 发送带有自定义发件人 ID 的 SMS

    The 文档 http docs aws amazon com sns latest dg sms publish to phone html sms publish sdk建议为此使用消息属性 但我似乎无法弄清楚要使用什么属性名称 到目前
  • fork 和 exec 许多不同的进程,并从每个进程中获取结果

    我已经设法从我的应用程序中分叉并执行一个不同的程序 我目前正在研究如何等待 exec 调用的进程通过管道或标准输出返回结果 但是 我可以使用单个 fork 来创建一组进程吗 或者我是否必须多次 fork 并再次调用同一个程序 我可以获得每个