本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

最新日志

很伤心,很累
关于个体(individual),实例(
关于个体(individual),实例(
RACER FaCT KAON2和Jen
黄智生博士讲座(zz from bbs.
语义网的相关资源
写呀写
找工作
WCT
IBM公司一些联系地址

最近的评论

回复:一点孤单
回复:找工作
回复:六一儿童节
免费***下载
回复:关于fork()的点点滴滴(1)
回复:关于fork()的点点滴滴(1)
回复:RACER FaCT KAON2和
回复:写给地球另一端的信
回复:WCT
回复:C++命名空间

连接


北邮真情流露   

写信给我:)




[C/C++编程]关于fork()的点点滴滴(1)
大隐于市 发表于 2005/5/27 19:42:11

fork()函数用于从已存在进程中创建一个新进程。可以通过检查fork()函数的返回值知道哪个是父进程,哪个是子进程。父进程得到的返回值是子进程的进程号,而子进程则返回0。pid_t fork(void);pid即为返回的进程ID号。 #include <sys/types.h>#include <unistd.h>int main(){pid_t pid;switch (pid = fork()){case -1:/* 这里pid为-1,fork函数失败 *//* 一些可能的原因是 *//* 进程数或虚拟内存用尽 */perror("The fork failed!");break;case 0:/* pid为0,子进程 *//* 这里,我们是孩子,要做什么? *//* 但是做完后, 我们需要做类似下面: */_exit(0);default:/* pid大于0,为父进程得到的子进程号 */printf("Child's pid is %d\n",pid);}当然,有人可以用‘if() ... else ...’语句取代‘switch()’语句,但是上面的形式是一个有用的惯用方法。知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是这些东西的 *拷贝*,不是它们本身。 子进程自父进程继承到:* 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))* 环境(environment)* 堆栈* 内存* 打开文件的描述符(注意对应的文件的位置由父子进程共享,这会引起含糊情况)* 执行时关闭(close-on-exec) 标志 (译者注:close-on-exec标志可通过fnctl()对文件描述符设置,POSIX.1要求所有目录流都必须在exec函数调用时关闭。* 信号(signal)控制设定* nice值 (nice值由nice函数设定,该值表示进程的优先级,数值越小,优先级越高)* 进程调度类别(scheduler class) (译者注:进程调度类别指进程在系统中被调度时所属的类别,不同类别有不同优先级,根据进程调度类别和nice值,进程调度程序可计算出每个进程的全局优先级(Global process prority),优先级高的进程优先执行)* 进程组号* 对话期ID(Session ID) (译者注:译文取自<<高级编程>>,指:进程所属的对话期(session)ID, 一个对话期包括一个或多个进程组* 当前工作目录* 根目录 (译者注:根目录不一定是“/”,它可由chroot函数改变)* 文件方式创建屏蔽字(file mode creation mask (umask)) * 资源限制* 控制终端子进程所独有:* 进程号* 不同的父进程号(译者注:即子进程的父进程号与父进程的父进程号不同,父进程号可由getppid函数得到)* 自己的文件描述符和目录流的拷贝(译者注:目录流由opendir函数创建,因其为顺序读取,顾称“目录流”)* 子进程不继承父进程的进程,正文(text),数据和其它锁定内存(memory locks)(锁定内存指被锁定的虚拟内存页,锁定后,不允许内核将其在必要时换出(page ut)* 在tms结构中的系统时间(tms结构可由times函数获得,它保存四个数据用于记录进程使用中央处理器(CPU:Central Processing Unit)的时间,包括:用户时间,系统时间,用户各子进程合计时间,系统各子进程合计时间)* 资源使用(resource utilizations)设定为0* 阻塞信号集初始化为空集(译者注:原文此处不明确,译文根据fork函数手册页稍做修改)* 不继承由timer_create函数创建的计时器* 不继承异步输入和输出

阅读全文(4656) | 回复(2) | 编辑 | 精华


回复:关于fork()的点点滴滴(1)
求助(游客)发表评论于2006/5/10 22:41:06

上面的程序会出现哪些情况啊

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除


回复:关于fork()的点点滴滴(1)
求助(游客)发表评论于2006/5/10 22:39:23

void end(void){printf("2");}int main(){if (Fork() == 0)atexit(end);if (Fork() == 0)printf("0");elseprintf("1");exit(0); }

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



公告

暂无公告...

专题

首页(30)
我的论文(1)
数据库应用(0)
XML相关(1)
杂谈(9)
C/C++编程(5)
软件工程(1)
算法与数据结构(0)
Java编程(3)
操作系统(0)
网络资源(2)

留言

签写新留言


统计

blog名称:若望的天地
日志总数:30
评论数量:60
留言数量:0
访问次数:152283
建立时间:2005年5月25日

 

 

 


站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.039 second(s), page refreshed 144778700 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号