对于如下 C 语言程序
int main() { printf("Hello World\n"); fork(); printf("HelloWorld\n"); fork(); printf("Hello World\n"); }
在 UNIX 操作系统中正确编译链接后,其正确的运行结果是
共打印出 6 行 Hello World
共打印出 7 行 Hello World
共打印出 8 行 Hello World
共打印出 9 行 Hello World
答案
共打印出 7 行 Hello World
解析
初始打印1行。
第一次 fork() 后,两个进程(P1和C1)各自打印第2行,累计3行。
第二次 fork() 发生在P1和C1上,形成P1、C1、P2(P1的子进程)、C2(C1的子进程),共4个进程。之后,这4个进程各自打印第3行。
因此,最终打印次数为:
初始1行 + 第一次fork后2行 + 第二次fork后4行 = 1 + 2 + 4 = 7行。
正确答案是:共打印出 7 行 Hello World。