fork() 是如何工作的?

2024-05-23

我对fork真的很陌生,这段代码中的pid在做什么?有人可以解释一下 X 行和 Y 行的结果吗?

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#define SIZE 5
int nums[SIZE] = {0,1,2,3,4};
int main()
{
    int i;
    pid_t pid;
    pid = fork();
    if (pid == 0) {
        for (i = 0; i < SIZE; i++) {
            nums[i] *= -i;
            printf("CHILD: %d ",nums[i]); /* LINE X */
        }
    }
    else if (pid > 0) {
        wait(NULL);
        for (i = 0; i < SIZE; i++)
            printf("PARENT: %d ",nums[i]); /* LINE Y */
    }
    return 0;
}

fork()复制该进程,因此在调用 fork 之后,实际上有 2 个程序实例在运行。

您如何知道哪个进程是原始(父)进程,哪个是新(子)进程?

在父进程中,子进程的PID(这将是一个正整数)从fork()。这就是为什么if (pid > 0) { /* PARENT */ }代码有效。在子进程中,fork()刚刚返回0.

因此,由于if (pid > 0)检查一下,父进程和子进程会产生不同的输出,可以看到here http://ideone.com/DasYqa(由@jxh 在评论中提供)。

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

fork() 是如何工作的? 的相关文章

随机推荐

  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com
  • LDA 主题建模 - 训练和测试

    我读过 LDA 并且了解当输入一组文档时如何生成主题的数学原理 参考文献称 LDA 是一种算法 只要给定一个文档集合 无需任何监督 就可以揭示该集合中的文档所表达的 主题 因此 通过使用 LDA 算法和吉布斯采样器 或变分贝叶斯 我可以输入
  • 在新的 intel x86 android 模拟器中访问 google api

    我只是尝试在新的 x86 android 模拟器中运行我公司的应用程序 但是我们的应用程序依赖于 google 地图 API 而这在 google 随 android sdk 版本 17 提供的 x86 系统映像中不可用 我的直觉告诉我答案
  • Woocommerce:当类别仅包含一项时如何直接跳转到产品页面

    我有一个允许显示产品类别的顶部菜单 在本例中 是我正在销售的应用程序的名称 单击此菜单项时 它会显示类别的内容 正如它应该做的那样 但是 由于该类别仅包含一项 因此我想直接跳转到产品页面 而不是显示包含一项的类别页面 这是相关页面的链接 B
  • Mypy 无法从文字列表推断项目的类型

    我有一个变量x和一个文字列表 例如 0 1 2 我想转换x这些文字之一 如果x在列表中 我将其退回 否则我返回一个后备值 from typing import Literal Set Foo Literal 0 1 2 foos Set F
  • 是否可以从 Julia 调用 Python 函数并返回其结果?

    我正在使用 Python 从网络上抓取数据 我想使用这些数据在 Julia 中运行计算 是否可以在 Julia 中调用该函数并返回其结果 或者我最好直接导出到 CSV 并以这种方式加载数据 绝对地 看PyCall jl https gith
  • app.conf 中的 playframework prod、qa、dev 变量在调试模式下不起作用

    我们使用 play bat run 进行生产 使用 play bat run dev 进行开发 还有另一个用于质量检查 但是当我们更改启动配置时 参数中会出现 dev 但它不会工作并加载生产变量 如何启动调试器以便它以我们的开发设置运行 谢
  • 在Python中从大文件中搜索单词列表

    我是新蟒蛇 我有一个单词列表和一个非常大的文件 我想删除文件中包含单词列表中的单词的行 单词列表按排序给出 并且可以在初始化期间输入 我正在努力寻找解决这个问题的最佳方法 我现在正在进行线性搜索 这花费了太多时间 有什么建议么 您可以使用i
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • 存储网站的多种语言版本的最佳方式是什么?

    我的网站 在 Linux 服务器上 需要支持多种语言 拥有 存储同一网站的多种语言版本的最佳实践是什么 我能想到的一些 存储在数据库中 每种语言都有不同的视图文件 gettex PHP 文件中的硬编码字 如 phpBB 中 对于网站 您确实
  • 从 Azure ML 实验中访问 Azure Blob 存储

    Azure ML 实验提供了通过以下方式读取 CSV 文件并将其写入 Azure Blob 存储的方法 Reader and Writer模块 但是 我需要将 JSON 文件写入 blob 存储 由于没有模块可以执行此操作 因此我尝试在Ex
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • IndexError:索引 10 超出尺寸为 10 的轴 0 的范围

    我正在以数字方式为 x 网格和 x 向量以及时间网格设置网格 但我再次设置了一个数组x 位置 只能在 0 到 20 之间并且t 时间 将从 0 到 1000 以便求解热方程 但每次我想要 例如 我将步数设置为 10 时 都会收到错误 Tra
  • 使用 Django 将文件异步上传到 Amazon S3

    我使用此文件存储引擎在上传文件时将文件存储到 Amazon S3 http code welldev org django storages wiki Home http code welldev org django storages w
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • 无法理解 .vimrc 中的一行

    我不明白以下行在 vimrc 中的作用 nmap
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Spring Boot在jar文件中找不到urlrewrite.xml

    我将 Spring Boot 与嵌入式 Tomcat 一起使用 类 UrlRewriteFilter 找不到配置文件 urlrewrite xml 该类使用 servletcontext getResourceAsStream this c
  • fork() 是如何工作的?

    我对fork真的很陌生 这段代码中的pid在做什么 有人可以解释一下 X 行和 Y 行的结果吗 include