请帮忙,这是我明天要面对的一个可能的面试问题:
找到的输出
main()
{
int tmp;
for(i=0;i<9;i++)
{
tmp=fork();
if(tmp>0)
break;
printf(“Hello”);
}
}
这里的关键是 fork() 将返回一个与新的子进程不同的值给原始进程。特别是,它返回 0 给孩子,而孩子的 pid 回到原来的。由此,您可以计算出输出。
(好吧,你可以使用 puts() 而不是 printf(),但由于你没有终止行,这使得输出有点不确定,正如@CharlieBurns 指出的那样。)
for(i=0;i<9;i++)
{
tmp=fork();
if(tmp>0) // if parent
break;
printf(“Hello”);
fflush(stdout); // if add this , I know the output:
}
这表示 :
每个父进程派生一个新进程并 break ,然后退出;
每个子进程打印 "Hello" 并派生它的子进程。
i=0 i=1 i = 8
fork fork fork
process 0 --> process 1 --> process 2 ... ->process 8 --> process9
| | | | | | | |
| "Hello" | "Hello" | Hello" | "Hello"
break break break break
共打印了 9 个“Hello”。
没有刷新缓冲区,没有人知道正确的输出。因为 fork 还将缓冲区从 parent 复制到 child 。