请分析一共几个进程?HELLO被输出多少次?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main () {
fork();
fork();
printf("HELLO\n");
}
图文解释:
在父进程中,首先第一个fork()语句,创建了一个子进程p1,此时的fork()不执行,否则会产生死循环(一直创建p1的子进程,p11…p111…),此时执行第二个fork()语句为 p1 创建了一个子进程 p11 ,还会执行print() 语句(第一次输出);接着往下是 p11这个子子进程会执行print()语句(第二次输出),这时,第一个进程的任务就完成了,接下来是父进程的第二个fork()语句,会执行一次print()语句(第三次输出)。最后到了print() 语句(第四次输出)。OK,搞定!
简单来说:
第一个fork执行之后,后两行代码会执行两次
第二个fork,创建子进程之后,返回pid给父进程,也返回了0给子进程,因此printf(“HELLO\n”)会执行两次;
所以 2 + 2 = 4 啦