c – 无法理解fork()输出

c – 无法理解fork()输出,第1张

概述假设有一个PID = 1的进程,它运行以下代码: int a = fork();int b = fork();printf(“a: %d, b: %d\n”, a, b); 让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等. 可能的输出是: a:2, b:3a:2, b:0a:0, b:4a:0, b:0 我有一些麻烦试图理解上面代码的输出,尤其是为什么a: 假设有一个PID = 1的进程,它运行以下代码:

int a = fork();int b = fork();printf(“a: %d,b: %d\n”,a,b);

让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等.

可能的输出是:

a:2,b:3a:2,b:0a:0,b:4a:0,b:0

我有一些麻烦试图理解上面代码的输出,尤其是为什么a:0,b:4和a:2,b:3.

解决方法 你知道的

The return value is the zero in the child and the process-ID number of the child in the parent,or -1 upon error.

那么,让我们一步一步地看到这里发生了什么.

当调用fork()时,它会创建一个ID为n的新子节点,然后在子节点0和父节点n中返回.

因此,假设我们的进程为pID 1,当第一个fork()被调用时,它会创建一个带有pID 2的进程,然后返回一个值. a将在进程2(子进程)中具有值0,并且在进程1(父进程)中将具有值2.

然后每个进程将调用fork()并将返回值分配给父进程中的b.在孩子中,b的值为0.

无论如何,我认为这个架构将简化理解:

主要开始:

||int a = fork(); // It creates a new process,and the old one continues going||-------------------------|a = 2; /* Parent */       a = 0; // Child|                         ||                         |int b = fork();           int b = fork(); // Each one create a new process|                         ||                         |-----------------------------||                         /* Child -> Parent */         // Child -> Child|                         a = 0; b = 4;                 a = 0; b = 0|||||-----------------------------|/* Parent -> Parent */        // Parent -> Childa = 2; b = 3;                 a = 2,b = 0;
总结

以上是内存溢出为你收集整理的c – 无法理解fork()输出全部内容,希望文章能够帮你解决c – 无法理解fork()输出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存