我不明白这个 fork() 的例子

2024-04-26

我有这个代码示例,但我不明白为什么这段代码会创建 5 个进程加上原来的进程。 (总共6个过程)

#include <unistd.h>

int main(void) {
    int i;
    for (i = 0; i < 3; i++) {
        if (fork() && (i == 1)) {
            break;
        }
    }
}

fork() http://linux.die.net/man/2/fork将进程一分为二,并返回 0(如果此进程是子进程)或子进程的 PID(如果此进程是父进程)。所以,这一行:

if (fork() && (i == 1)) break;

表示“如果这是父进程,并且这是第二次循环,则跳出循环”。这意味着循环像这样运行:

  • i == 0:第一次循环时,i为0,我们创建两个进程,都进入循环i == 1. 现在总共有两个进程

  • i == 1:这两个进程都分叉了,但是其中两个没有继续迭代,因为if (fork() && (i == 1)) break;行(不继续的两个都是 fork 调用中的父母)。现在总共四个过程,但其中只有两个继续循环。

  • i == 2:现在,继续循环的两个都分叉了,结果有6个过程。

  • i == 3:所有 6 个进程退出循环(因为i < 3 == false,不再循环)

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

我不明白这个 fork() 的例子 的相关文章

  • 如何处理文件中的特殊字符(ഀ)

    我有一个文件 当我打开它时 它看起来像这样 Notepad A B C D E 31 HB 39 Ph 49 32 FB 38 Ph 59 当我尝试从 WinScp 打开它时 它看起来如下所示 A B C D E 31 HB 39 Ph 4
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

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

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

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何获取内存中缓冲区的文件描述符?

    如果我有一个包含文件数据的缓冲区 如何从中获取文件描述符 这是一个源自于的问题如何解压内存中的文件 https stackoverflow com questions 1553653 how to untar file in memory
  • jquery val() 不工作

    jQuery val 不起作用 这是简单的脚本 com form submit function var name nama val var komentar komentar val alert Hi name this is your
  • 如何将data.table按多列连续分组

    我想获取一堆由数百个分组变量分组的描述性统计数据 我知道从如何按多列对data table进行分组 https stackoverflow com questions 12478943 how to group data table by
  • 更新进度动画 gif 在回发时停止

    我使用了 ajax 更新进度控件 在回发发生时显示动画 gif 问题 它显示一段时间 但随后停止刷新 或者更确切地说 停止播放 循环 造成同样情况的实际原因是什么 请指教 谢谢 使用 Internet Explorer 时 gif 的动画将
  • 我想要表格格式的选择查询结果,例如摘要报告

    例如 month1 month2 month3 total district1 5 2 9 16 district2 1 0 11 12 total 260 150 140 550 这里最终的总数并不重要 但至少我需要显示每个地区每月的数量
  • 以非 root 用户身份在 UserData 中运行命令

    我正在尝试使用 EC2 UserData 脚本安装气流 我需要使用非 root 用户 ec2 user 运行一些命令 请参阅下面的脚本 UserData Fn Base64 Sub bin bash set xe Install GCC y
  • JavaFX 8:拦截应用程序“退出”

    为了验证用户所做的所有更改是否已保存 我想拦截 JavaFX 应用程序的退出 退出 是否有一种通用的方法来实现这一目标 例如覆盖事件 或者还有更多方法吗 正如他们已经说过的 这是通过拦截来完成的WindowEvent WINDOW CLOS
  • 在 Android 编辑文本字段中显示一条消息

    海 我有一个带有一个文本字段的 Android 程序 当它加载到模拟器上时 我需要在该文本字段内显示一条消息 当用户在该文本框中单击时 该消息应该消失 例如 请输入姓名 任何人都可以在这里发布一些示例代码吗 只需使用或致电setHint在物
  • 设备中的嵌套资源

    我是 Rails 新手 我想要一些关于我的路线和正确的路由逻辑的建议 我正在开发一个非常简单的应用程序 用户可以在其中发布列表 用户 设计模型 有很多列表 并且该列表属于一个用户 我的列表中有一个 user id integer 当用户成功
  • Elasticsearch 崩溃后无法恢复

    磁盘空间不足 导致 Elasticsearch 分片崩溃 三个节点现在为红色 两个节点已恢复 它们的状态为黄色 ES 的 CPU 利用率为 150 内存利用率很高 正在尝试恢复它们 但似乎存在一些版本匹配冲突 我清理了磁盘空间并删除了分片的
  • 如何在doctrine2查询生成器where语句中添加运算符

    我试图从一个表中进行选择 其中所选持续时间除以条目持续时间等于没有余数 qb em gt createQueryBuilder gt from AcmeBlogBundle Entry e gt andWhere duration e du
  • Android 和 PhoneGap——在 NPObject 上调用方法时出错

    我正在尝试设置FLAG SHOW WHEN LOCKED在我的phonegap应用程序中 但仅当显示特定页面时 为此 我有一个 Java 插件 扩展自CordovaPlugin在以下代码中execute method if action e
  • MySQL Workbench 连接编码

    在测试一些代码时 我偶然发现了以下 MySQL 错误 Error Code 1267 Illegal mix of collations utf8 general ci IMPLICIT and utf8mb4 general ci COE
  • PHP GD库调整照片大小

    我正在尝试使用 PHP 的 GD 库创建照片的缩略图 以下是我正在采取的步骤 创建GD图像 资源 获取图像的高度和宽度 创建一个空白的 gd 图像资源 高度为 100 像素 宽度适当 将资源图像复制到空白 gd 图像资源并保存这两个图像 这
  • 根据长度将字符串拆分为包含 1-3 个单词的字符串数组

    我有以下输入字符串 Lorem ipsum dolor sat amet consectetur adipiscing elit sed doeiu smod tempor incididunt ut Duis aute irure dol
  • 如何指定 Perl 的 Inline::Python 模块正在使用的 Python 版本?

    我正在运行 Debian squeeze 和 perl v5 10 1 并且安装了两个版本的 python pyversions i python2 5 python2 6 Python Inline显然使用python2 5 perl u
  • 如何在 Netbeans 中向 C++ 项目添加运行参数

    我正在使用 Netbeans 7 0 及其 C 插件 我想做这样的事情 test exe lt in txt gt out txt当我运行该项目时 在 Netbeans 中哪里可以将这些参数添加到项目中 提前致谢 Under File Pr
  • 如何有效地读取屏幕上的数字(pytesseract)?

    我正在尝试读取屏幕上的数字 为此我正在使用 pytesseract 问题是 尽管它有效 但它的作用很慢 而且根本不会产生好的结果 例如 对于这张图片 我可以制作这个阈值图像 它读取的是 5852 而不是 585 这是可以理解的 但有时使用不
  • 解决 Django 的 make_aware 中的 AmbigouslyTimeError

    我有一个代码如下 from django utils timezone import get current timezone make aware make aware some datetime get current timezone
  • 我不明白这个 fork() 的例子

    我有这个代码示例 但我不明白为什么这段代码会创建 5 个进程加上原来的进程 总共6个过程 include