免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: btiger2000
打印 上一主题 下一主题

[C] linux初学编程的一个疑问。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-04-10 13:01 |只看该作者

回复 #1 btiger2000 的帖子

fork 本意为 “鱼叉”,想想形状估计问题就解决了一半了!

调用fork后是分为了两个进程,共用一段代码,子进程复制了父进程的数据,所以看似相反的条件都被执行了!

可以在fork()前加上这样的代码printf("Hello\n" ) ;(发现打印一次Hello);加上printf("Hello" ) ;(发现打印两次Hello)



[ 本帖最后由 bladmin 于 2009-4-10 13:03 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2009-04-10 13:09 |只看该作者
看书吧,看看操作系统理论的进程部分。

论坛徽章:
0
13 [报告]
发表于 2009-04-10 16:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
14 [报告]
发表于 2009-04-10 16:38 |只看该作者
从网上找了答案,有点理解了。

fork()并不是进行进程切换,而是复制一个当前进程。举例来说,假如初始进程号为100,当进入fork()系统调用后,操作系统就把100号进程一模一样地复制出来一个新的进程101号。所谓一模一样,是指100号进程与101号进程所包含的任何信息,例如变量的值,空间分配,特别是正在执行的语句等等都相同。这时你的一套代码便同时在这两个进程中执行,就象一个EXE文件被同时执行了两次一样。由于两个进程下一步要执行的语句都是从fork()返回,这时操作系统就特意让100号进程中的fork()返回101,而101号进程中的fork()返回0,这样一套代码就能够分辨清楚到底是处在哪个进程中了。


也就是调用fork后,有两套代码在执行,分别是子进程和父进程,并不是fork返回两个值。也就出现了上述两个结果。
3楼的,照你的代码改,输出效果依然。子进程调用exit(0)退出了,父进程不执行exit(0),还是会显示父进程的代码。

[ 本帖最后由 btiger2000 于 2009-4-10 16:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP