我们假设有一个进程,PID = 1它运行以下代码:
int a = fork();
int b = fork();
printf(“a: %d, b: %d\n”, a, b);
Run Code Online (Sandbox Code Playgroud)
让我们进一步假设,新的PID旨意被赋予一个接一个,如此发出第二个PID会2,然后3等
可能的输出是:
a:2, b:3
a:2, b:0
a:0, b:4
a:0, b:0
Run Code Online (Sandbox Code Playgroud)
我有一些麻烦试图理解上面代码的输出,尤其是为什么a:0, b:4和a:2, b:3.
rpa*_*ani 13
你知道的
返回值是子项中的零和父项中子项的process-id号,或者出错时为-1.
那么,让我们一步一步地看到这里发生了什么.
当fork()被调用时,它会创建id为一个新的子n,然后在孩子返回0和家长n.
因此,假设我们的进程为pid 1,当第一个fork()被调用时,它会创建一个带有pid的进程2,然后返回一个值.a将0在过程2(子)中具有价值,并且将2在过程中具有价值1(父母).
然后,每个进程都将调用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |