对于如下 C 语言程序
int main() { printf("Hello World\n"); fork(); fork(); fork(); printf("Hello World\n"); }
在 UNIX 操作系统中正确编译链接后,其正确的运行结果是
共打印出 6 行 Hello World
共打印出 7 行 Hello World
共打印出 8 行 Hello World
共打印出 9 行 Hello World
答案
共打印出 9 行 Hello World
解析
答案是:共打印出 9 行 Hello World
分析:
初始状态下,主线程会先打印出第一行 "Hello World"。
然后调用第一次 fork(),创建一个子进程。此时,存在父进程和子进程两个进程,它们都会从 fork() 后的下一条语句继续执行。
接着,在这两个进程中各自再调用 fork(),每个进程都分裂成两个新的进程,这样就总共有 4 个进程了。
最后,这 4 个进程中的每一个再调用一次 fork(),导致进程总数增加到 8 个。每个进程都有自己的执行流,从上次 fork() 后的位置开始。
每个进程都会执行 printf("Hello World\n"),因此,除了最开始主线程打印的一次外,经过三次 fork() 后存在的 8 个进程各自还会打印一次,共计额外打印 8 行 "Hello World"。
综上所述,总共会打印出 9 行 "Hello World"(初始的父进程打印一次,之后每次 fork() 产生的所有子进程各自打印一次)。