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