设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
求助:关于fork系统调用
返回列表
查看:
1289
|
回复:
3
求助:关于fork系统调用
[复制链接]
wb_pla
wb_pla
当前离线
积分
1
IP卡
狗仔卡
发表于 2005-11-20 10:51:35
|
显示全部楼层
|
阅读模式
关于fork系统调用看了好多资料,可是对于它的一次调用两次返回一直都没有想清楚,为什么在父进程中返回子进程号,在子进程中返回0。不知哪位大虾可否讲解一下fork的详细执行过程,小弟不胜感激!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
kevin.hu
kevin.hu
当前离线
积分
5
IP卡
狗仔卡
发表于 2005-11-20 18:18:02
|
显示全部楼层
对于fork来说,父子进程共享同一段代码空间,所以给人的感觉好像是有两次返回,其实对于调用fork的父进程来说,如果fork出来的子进程没有得到调度,那么父进程从fork系统调用返回,同时分析sys_fork知道,fork返回的是子进程的id。再看fork出来的子进程,由copy_process函数可以看出,子进程的返回地址为ret_from_fork(和父进程在同一个代码点上返回),返回值直接置为0。所以当子进程得到调度的时候,也从fork返回,返回值为0。
所以“一次调用两次返回”是2个不同的进程哦!
回复
支持
反对
使用道具
举报
显身卡
ningbo
ningbo
当前离线
积分
26
IP卡
狗仔卡
发表于 2005-11-20 21:48:09
|
显示全部楼层
如果用 pid=fork()
那么也就是返回二个pid
一个在父进程中,一个在子进程中
子进程返回0,父进程中返回的是子进程的pid
这样的好处是便于父进程管理子进程,比如可以在父进程中kill子进程 等待
回复
支持
反对
使用道具
举报
显身卡
ningbo
ningbo
当前离线
积分
26
IP卡
狗仔卡
发表于 2005-11-20 21:48:22
|
显示全部楼层
如果用 pid=fork()
那么也就是返回二个pid
一个在父进程中,一个在子进程中
子进程返回0,父进程中返回的是子进程的pid
这样的好处是便于父进程管理子进程,比如可以在父进程中kill子进程 等待
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Slackware Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表