我被困在代码pid = fork();
的行上,在此之前我了解到创建了2个子进程,但是请澄清一下,直到到达pid=fork();
行时,前一个子进程被擦除并且pid将再次从0开始分叉,还是只是继续与2个孩子一起分叉?
void main() {
int pid = fork();
if(pid != 0)
fork();
pid = fork();
if(pid == 0)
fork();
fork();
exit(0);
}
答案 0 :(得分:1)
如果fork()成功,它将向子级返回0,并向父级返回进程ID。因此对于父母来说,pid!= 0,对于孩子来说,就是pid!= 0。 在第一个if之后,在
之前pid = fork()
行。有3个过程。然后,这3个进程分别创建一个新的子进程,然后依次创建另一个子进程。最后,所有进程都产生一个子进程。如果fork()均未失败,这将为我们提供(3 + 3 + 3)* 2 = 18个进程。