linux fork问题

和商也要 2013-11-02 01:13:43
int main(void)
{
printf("parent pid1 = %d\n", getpid());

if (fork() == 0)
{
printf("child1 = %d\n", getpid());
getchar();
printf("child2 = %d\n", getpid());
exit(0);
}
printf("parent2= %d\n", getpid());
getchar();
printf("parent3= %d\n", getpid());
getchar();
return 0;
}

这段代码每次执行的结果游客能不一样,能不能解释一下机制?
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LFYer 2013-11-04
  • 打赏
  • 举报
回复
在我这里是按三次回车才结束的,其中第一和第三次回车给了父进程,第二次回车给了子进程。你按两次回车就结束的话,我只能猜测是两次回车都给了父进程,而父进程结束后shell又重新成为前台进程,并打印出命令提示符,而子进程变成后台进程了。建议你这时用ps命令看看子进程是不是真的退出了把。
crazykiss521 2013-11-03
  • 打赏
  • 举报
回复
父子进程都阻塞在getchar()了,第一次回车两进程可能都响应了,第二次只有父进程收到!
taozi1234567 2013-11-03
  • 打赏
  • 举报
回复
不一样是正常的,fork创建之后,父进程和子进程的pc执行起点是一样的,但是不能保证谁先执行,谁后执行。
和商也要 2013-11-02
  • 打赏
  • 举报
回复
最终结果是 我一共按了两次回车就退出了!不应是三次回车吗????
Carl_CCC 2013-11-02
  • 打赏
  • 举报
回复
你父进程都有两个getchar,按一次肯定退不出来。而且你的程序fork都要输入,一个进程退出后,另外一个退出还没谱呢。
和商也要 2013-11-02
  • 打赏
  • 举报
回复
父进程和子进程 都有一个getchar函数,那在终端应该按两下按键才能退出程序,为什么按一下就退出了??
max_min_ 2013-11-02
  • 打赏
  • 举报
回复
不一样很正常的! fork函数不能保证子进程还是父进程哪个先执行的!不能确定的

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧