我正在试图弄清楚这个程序创建了多少个进程,包括初始父进程。 正确的答案应该是9,但我不明白为什么答案是9.如何创建这9个流程?提前谢谢!
#include <stdio.h>
#include <unistd.h>
…
int main()
{
pid_t john;
john = fork( );
if (john == 0) {
fork( ); fork( ); fork( );
}
/* Consume resources of another process */
/* This does NOT create a new process. */
Consume( ); Consume( );
return 0;
}
答案 0 :(得分:8)
请记住,在fork();fork();fork();
上,父母和孩子都会遇到下一个分叉。
main
|
|\ john = fork()
| \
| \
| |\ fork()
| | \-----\
| |\ |\ fork()
| | \ | \
| | \ | \
| | \ | \
| |\ |\ |\ |\ fork()
| | | | | | | | |
1 2 3 4 5 6 7 8 9
答案 1 :(得分:6)
john = fork( ); //fork a new process, we have 2 now.
if (john == 0) {// child process go in the if statement
fork( ); //child process fork to 2 processes
fork( ); //2 processes continue to fork,so we have 2 more.
fork( ); //4 processes continue to fork, so we have 4 more.
}
//up to here, the child process of the first fork is now 8 processes
//adding the first parent process, that is 9 in total.
答案 2 :(得分:0)
P1分叉,创造P2。 P1有john = <NOT ZERO>
,P2有john = 0
。因此P2执行if
。它分叉,创造P3。现在,P2和P3处于第二个分支。所以他们分叉,创造了P4和P5。现在P2,P3,P4和P5都剩下一个叉子。他们分叉,创造P6,P7,P8和P9。产生了九个进程。
fork
创建调用进程的程序映像的精确副本,除了它向子节点返回0并向父节点返回PID的事实。孩子将和父母在叉子后面的地方一样。
答案 3 :(得分:0)