加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 无法理解fork()输出

发布时间:2020-12-16 10:51:39 所属栏目:百科 来源:网络整理
导读:假设有一个PID = 1的进程,它运行以下代码: int a = fork();int b = fork();printf(“a: %d,b: %dn”,a,b); 让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等. 可能的输出是: a:2,b:3a:2,b:0a:0,b:4a:0,b:0 我有一些麻烦试图理解上
假设有一个PID = 1的进程,它运行以下代码:

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

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

可能的输出是:

a:2,b:3
a:2,b:0
a:0,b:4
a: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 -> Child
a = 2; b = 3;                 a = 2,b = 0;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读