LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1293|回复: 3

求助:关于fork系统调用

[复制链接]
发表于 2005-11-20 10:51:35 | 显示全部楼层 |阅读模式
关于fork系统调用看了好多资料,可是对于它的一次调用两次返回一直都没有想清楚,为什么在父进程中返回子进程号,在子进程中返回0。不知哪位大虾可否讲解一下fork的详细执行过程,小弟不胜感激!
发表于 2005-11-20 18:18:02 | 显示全部楼层
对于fork来说,父子进程共享同一段代码空间,所以给人的感觉好像是有两次返回,其实对于调用fork的父进程来说,如果fork出来的子进程没有得到调度,那么父进程从fork系统调用返回,同时分析sys_fork知道,fork返回的是子进程的id。再看fork出来的子进程,由copy_process函数可以看出,子进程的返回地址为ret_from_fork(和父进程在同一个代码点上返回),返回值直接置为0。所以当子进程得到调度的时候,也从fork返回,返回值为0。
所以“一次调用两次返回”是2个不同的进程哦!
回复 支持 反对

使用道具 举报

发表于 2005-11-20 21:48:09 | 显示全部楼层
如果用 pid=fork()
那么也就是返回二个pid
一个在父进程中,一个在子进程中
子进程返回0,父进程中返回的是子进程的pid
这样的好处是便于父进程管理子进程,比如可以在父进程中kill子进程 等待
回复 支持 反对

使用道具 举报

发表于 2005-11-20 21:48:22 | 显示全部楼层
如果用 pid=fork()
那么也就是返回二个pid
一个在父进程中,一个在子进程中
子进程返回0,父进程中返回的是子进程的pid
这样的好处是便于父进程管理子进程,比如可以在父进程中kill子进程 等待
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表