请帮助,这是我明天要面对的一个可能的面试问题:找到输出
main()
{
int tmp;
for(i=0;i<9;i++)
{
tmp=fork();
if(tmp>0)
break;
printf(“Hello”);
}
}
答案 0 :(得分:1)
这里的关键是fork()将返回与原始进程不同的值,而不是新的子进程。特别是,它将0返回给孩子,将孩子的pid返回给原始孩子。从那里,你可以找出输出。
(好吧,你可以使用puts()代替printf(),但由于你没有终止这些行,这使得输出有点不确定,正如@CharlieBurns指出的那样。)
答案 1 :(得分:0)
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:
}
这意味着:
每个父进程分叉一个新进程并中断,然后退出;
每个子进程打印“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”打印。
没有刷新缓冲区,没有人知道正确的输出。 Bacause fork还将缓冲区从父级复制到子级。