对于如下 C 语言程序
int main() { int i; for ( i = 0; i < 3;i++) { fork(); printf("Hello World\n"); } }
在 UNIX 操作系统中正确编译链接后,其运行结果为
共打印出 8 行 Hello World
共打印出 10 行 Hello World
共打印出 12 行 Hello World
共打印出 14 行 Hello World
答案
共打印出 14 行 Hello World
解析
程序的执行流程如下:
循环将执行3次,每次循环内部都会调用fork()函数。
第一轮循环:创建第一个子进程,此时有父进程和子进程,共2个进程,每个进程打印一次"Hello World",合计打印2次。
第二轮循环:每个现有的进程(父进程和第一轮产生的子进程)又各自调用fork(),因此进程总数变为4个,每个进程再次打印一次"Hello World",合计再打印4次。
第三轮循环:每个现有的4个进程再次各自调用fork(), 进程总数变为8个,每个进程打印一次"Hello World",合计再打印8次。
综上所述,每次循环后进程数翻倍,且每次循环中的每个进程都会打印一次"Hello World"。因此,总打印次数为:
2(第一轮)+ 4(第二轮)+ 8(第三轮)= 14次。
所以,正确的运行结果是:
共打印出 14 行 "Hello World"