fork程序问题

jsjjf2000 2006-08-30 05:41:02
最近在学习linux的进程编程,做了个小程序,程序如下:
----------------
void main(){
int i;
printf("This is header!\n");
if ( fork() == 0 ) {
/* 子进程程序 */
for ( i = 1; i < 3; i ++ )
printf("This is child process\n");
}
else {
/* 父进程程序*/
for ( i = 1; i < 4; i ++ )
printf("This is process process\n");
}
}

-------------
结果如下:
This is header!
This is child process!
This is header!
This is father process!
This is father process!
This is child process!
This is father process!
This is child process!
--------------------------
不知道为什么?执行过程到底是怎样的啊?
第一行的This is header!是在父进程中执行的还是在子进程?
-----------------
还请各位高手不吝赐教!
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsjjf2000 2006-08-31
  • 打赏
  • 举报
回复
谢谢大侠,不过这个是在linux下运行的结果啊,不知为何?
godgogogo 2006-08-31
  • 打赏
  • 举报
回复
This is header!在主进程运行,只可能执行一次。
This is father process!不是要执行四次吗?怎么只有三次,是不是你第三行打错了。
fork()是唯一一个被调用一次,但返回两次的函数。两次返回的区别是子进程返回值是0,父进程返回值是新子进程的进程ID.
redex 2006-08-31
  • 打赏
  • 举报
回复
你把代码敲一遍自己试试,输出肯定不是那样.
fytzzh 2006-08-30
  • 打赏
  • 举报
回复
当fork返回0的时候子进程开始运行,所以This is header!是在主进程里打印的,并且只有一次。在你的结果里不可能有两次。
当fork返回后(有两个返回值),父子进程都执行fork之后的语句。到底谁先执行,执行多长时间都是cpu时间切换来决定的。

23,120

社区成员

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

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