对于如下 C 语言程序
int main() { int i; for ( i = 0; i < 1;i++) { fork(); printf("Hello World\n"); } }
在 UNIX 操作系统中正确编译链接后,其运行结果为
共打印出 2 行 Hello World
共打印出 4 行 Hello World
共打印出 6 行 Hello World
共打印出 8 行 Hello World
答案
共打印出 2 行 Hello World
解析
程序的执行流程如下:
进入循环,循环条件i < 1仅在i为0时满足,因此循环体只执行一次。
在循环体内,首先调用fork()函数创建一个子进程。此时,存在一个父进程和一个子进程。
之后,父子进程都会执行printf("Hello World\n");。
由于循环只执行了一次,每个进程(父进程和子进程)都只调用了一次printf。因此,无论从循环的角度还是fork()调用的角度来看,每次fork()之后确实有两个进程,但关键在于理解循环只执行了一轮,限制了fork()的调用次数。
所以,正确的输出是:
共打印出 2 行 Hello World