在 C(非 C++)中使用 fork() 从 1 个父级中生成 3 个子级

2024-02-10

您好,我一直在开发一个程序,该程序会分叉孩子,稍后将从每个孩子中分叉出更多的孩子,但这不是我需要帮助的。当我运行我的程序时(在这里它是一个函数,但工作原理相同),我应该有一个父级(PPID)生成 3 个子级(PIDS = 1,2,3),但我得到的是相同的 PID 和 PPID 3次(我当前的代码)或在我得到3个父母,每个父母有一个孩子之前,PPID和PIDS都不同,但PPID与之前的孩子PID相同。在我最近的尝试中,它从未在孩子(儿子)上方显示父母(爸爸)消息。它应该看起来像这样

[dad] hi am I PID 1234 and I come from ####(dont care what this number is)
[son] hi i am PID 1111 and I come from PPID 1234
[son] hi i am PID 1112 and I come from PPID 1234
[son] hi i am PID 1113 and I come from PPID 1234

这是我的代码。我只是在可能的情况下寻找提示,除非这只是我犯的一个愚蠢的错误,例如“哦,只需将 fork() 移至子进程”或类似的错误。

我还有一个 child_count 这样我就可以轻松地计算孩子的数量。

 int forking(null)
{
       void about(char *);
        int i=0;
        int j=0;
        int child_count =0;
        about("dad");

    for(i = 0; i < 3; i++ ){
        pid_t child = 0;
        child = fork();


            if (child < 0) { //unable to fork error
                    perror ("Unable to fork");
                    exit(-1);}

           else if (child == 0){ //child process
                    about ("son");
                    printf("I am child #%d \n",child_count);
                    child_count++;
                    exit(0);}

            else { //parent process (do nothing)

                }
            }

                for(j = 0; j < 3; j++ ){
                            wait(NULL);//wait for parent to acknowledge child process
                            }
return 0;
}

家长需要
- 打印一条消息
- 呼叫叉子三遍
- 等待三个孩子退出

每个孩子都需要
- 打印一条消息
- 出口

所以代码很简单

int main( void )
{
    printf( "[dad] pid %d\n", getpid() );

    for ( int i = 0; i < 3; i++ )
        if ( fork() == 0 )
        {
            printf( "[son] pid %d from pid %d\n", getpid(), getppid() );
            exit( 0 );
        }

    for ( int i = 0; i < 3; i++ )
        wait( NULL );
}

产生这个输出

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

在 C(非 C++)中使用 fork() 从 1 个父级中生成 3 个子级 的相关文章

  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 使用 C# 读取 Soap 消息

  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock

随机推荐

  • 在 onHandleIntent 之前捕获 IntentService Intent

    我有一个 IntentService 它将要进行的 Web 服务调用排队 我将一个整数作为 Extra 传递给每个 Intent 它定义了要进行的 Web 服务调用的类型 我想创建一种情况 如果执行特定 Web 服务的 Intent 被传递
  • javascript有API这样的概念吗

    我主要用java编程 几乎没有javascript知识 我的问题是 javascript 是否允许使用 API 例如 我有一个 javascript 应用程序 我希望向其中公开一些函数 例如中间件 API 集 这个中间件也可以用 javas
  • 修改 tableView 中的 UITableViewCellaccessoryType 时出现问题:didSelectRowAtIndexPath:

    我有一个透明的表格视图 带有子视图 UIImageView 的 UIViewController 和位于 UIImageView 同级顶部的另一个子视图 UITableView 其背景 clearColor UITableViewCells
  • 将 Spark 数据帧插入 hbase

    我有一个数据框 我想将其插入到 hbase 中 我遵循这个文档 https hbase apache org book html sparksql dataframes 这就是我的数据框的样子 id name address 23 marr
  • C# 巨大的 2 维数组

    我需要在 C WinForms 中声明连续超过 20000 个项目的方阵 我读到 32 位中 2GB Net 对象大小限制 以及 64 位操作系统中的相同情况 据我了解 唯一的答案是使用不安全的代码或使用 C 编译器构建的单独的库 这个问题
  • Java Swing JTable 以编程方式选择多行

    我有一个包含多行的 JTable 每一行都通过散点图上的 Point 呈现 我要做的是 当在散点图上选择给定点时 我必须将此选择与 JTable 中相应行的选择相关联 我有一个整数代表我必须突出显示的行 我尝试的是 JTable table
  • 如何在toastr中显示确认对话框

    我有以下代码用于控制器中的删除按钮 scope removes function scope toastr success Delete all br br
  • 如何解析包含逗号的值的 CSV?

    假设您有一个字符串如下 str one value two value three cool value four value 如何将其变成数组 如下所示 arr array one value two value three cool v
  • 将 String 变成只有 1 行

    我的输出基本上是一个段落 当我尝试在字符串中搜索子字符串时 如果该子字符串被分割 它就不起作用 如何使段落字符串只有 1 行 示例字符串 I have an output that is basically a paragraph and
  • GNOME 的 Java-Atk-Wrapper 中的错误 - 如何禁用 Swing 组件或应用程序的可访问性?

    我相信我在 GNOME Accessibility 的 Java 包装器中发现了一个错误 导致使用 Tree 或 Table UI 的 Scala Java 应用程序出现严重的性能问题 bug https github com GNOME
  • 点运算符和范围解析运算符有什么区别

    我只是想知道 之间的区别 运算符和 运算符 前者 点 用于访问对象的成员 后者 双冒号 用于访问命名空间或类的成员 考虑以下设置 namespace ns struct type int var 在这种情况下 要引用作为命名空间成员的结构
  • SystemExit:在 iPython Notebook 中调用 parse_args() 时出现 2 错误

    我正在学习使用 Python 和 scikit learn 并执行以下代码块 最初来自http scikit learn org stable auto examples document classification 20newsgrou
  • 我怎样才能最小化这个功能?

    我试图证明there https math stackexchange com questions 4062632 finding the right epsilon某个函数不能为负值 由于我无法证明 也无法说服自己这是真的 所以我将函数编
  • R SVM 对于缺失数据的预测返回 NA

    我尝试使用 e1071 包中经过训练的 SVM 进行预测 但我的数据包含一些缺失值 NA 当该实例有任何缺失值时 我希望返回的预测为 NA 我尝试使用 na action na pass 如下 但它给了我一个错误 名称错误 ret2 如果我
  • 尝试理解 Jasmine 的 toHaveBeenCalled() 匹配器

    我是新来的jasmine这是我的src我在其中创建的文件Auth class function Auth Auth prototype isEmpty function str return str 0 str length Auth pr
  • 谷歌地图 API 发生变化?

    我使用 google 地图 开放图层和 dojo 工具包为 Web 应用程序构建了一个地图组件 它加载了谷歌地图并绘制了数据点 直到今天凌晨 一切都工作得很好 但突然地图停止加载 没有 JavaScript 错误 打开图层和 google
  • 通过“python setup.py test”将命令行参数传递给nose

    套餐设置 我已经构建了一个Python包 它使用nose http nose readthedocs io en latest 供测试用 所以 setup py包含 test suite nose collector tests requi
  • Scipy:生成NxN离散余弦矩阵

    使用 scipy 有没有一种简单的方法来模拟 MATLAB 的行为dctmtx对于给定的 N 返回一个 NxN DCT 矩阵的函数 有scipy fftpack dctn但这仅适用于 DCT 如果我不想使用 scipy 之外的其他依赖项 我
  • 我可以在 Android 中找到我的接入点的 MAC 地址吗?

    我的 Android 应用程序可以找到它所连接的 Wifi 接入点的 MAC 地址吗 android net wifi WifiInfo getMacAddress 的文档未提供任何详细信息 See http developer andro
  • 在 C(非 C++)中使用 fork() 从 1 个父级中生成 3 个子级

    您好 我一直在开发一个程序 该程序会分叉孩子 稍后将从每个孩子中分叉出更多的孩子 但这不是我需要帮助的 当我运行我的程序时 在这里它是一个函数 但工作原理相同 我应该有一个父级 PPID 生成 3 个子级 PIDS 1 2 3 但我得到的是