这是输出---
家长:我的pid是4525 家长:我父母的pid是3350 帕兰特开始 - 4525 3350 前叉 在Fork之前 儿童4526 4525 在父母 ---父母结束---
当我尝试执行以下代码---
void main(int argc, char *argv[])
{
int status;
pid_t my_pid, parent_pid,child_pid;
my_pid = getpid();
parent_pid = getppid();
printf("\nParent: my pid is %d", my_pid);
printf("\nParent: my parent's pid is %d", parent_pid);
printf("\nparant started- %d %d",my_pid,parent_pid);
printf("\nBefore Fork");
if((child_pid = fork()) < 0 )
{
perror("fork failure");
exit(1);
}
if(child_pid == 0)
{
printf("\n Child %d %d\n",getpid(),getppid());
}
else
{
printf("\nIn parent");
wait(&status);
printf("\n---Parent End---\n");
}
}
为什么前叉打印两次?感谢
答案 0 :(得分:4)
这是因为你没有在fork()
之前刷新输出缓冲区。改为:
printf("\nBefore Fork\n");
或:
printf("\nBefore Fork");
fflush(stdout);