标题: system函数
clm615
新生入学
Rank: 1
注册用户



UID 159635
精华 0
积分 0(积分有什么用?)
帖子 4
阅读权限 10
注册 2006-5-30
状态 离线
发表于 2007-8-14 10:19  资料  个人空间  短消息  加为好友 
system函数

在看APUE10.18这节看调用system函数的程序时,有个问题向大家讨教。以下时程序的简单描述:
+d~H^-JY%^)xsig_int(int),sig_chld(int);
/?:`[e#v]Lwww.linuxeden.commain()
z b']*G_;T
L
{;P7X:lCJ$ZC5Cig
signal(SIGINT,sig_int);
h/wKz `q9Udsignal(SIGCHLD,sig_CHLD);
Thc,CY2A?rv        ?Linux伊甸园论坛system("/bin/ed");}Linux伊甸园论坛r
u_6En g(Y

书上说这个程序的过程是:a.out(父进程)fork出一个shell处理命令,然后在shell上fork一个进程那就是ed。^9n9|&Gd&l
~/R1Z;J/V

www.linuxeden.comJ7N,}*T(IVg
在解释这个程序是有这么一段话:“当编辑程序终止时,对父进程(a.out进程)产生SIGCHLD信号。父进程捕捉它,执行其处理程序 sig_chld,然后从其返回。但是若父进程正捕捉SIGCHLD信号,那么在system函数执行时,父进程中该信号的递送应当阻塞。实际上,这就是 POSIX所说明的。否则,当system创建的子进程结束时,system的调用者可能错误地认为,它自己的一个子进程结束了。”
)[TOf:@G%]'EQv9[q.V
1、他说当编辑程序终止时,对父进程(a.out进程)产生SIGCHLD信号,编辑程序的父进程不是shell吗,怎么会是a.out呢?
]KI^#b&i2、“当system创建的子进程结束时,system的调用者可能错误地认为,它自己的一个子进程结束了。”system创建的子进程是ed编辑器, system的调用者是a.out,ed结束的时候,是由shell收到SIGCHLD信号的,a.out 怎么会认为自己的子进程结束了呢,a.out没收到信号啊?
$Pk(^F:jD%P        tLinux伊甸园论坛
q$Kbk!I6P[ 本帖最后由 clm615 于 2007-8-14 12:14 编辑 ]

顶部
不容错过的IBM 集群技术资源汇总
clm615
新生入学
Rank: 1
注册用户



UID 159635
精华 0
积分 0(积分有什么用?)
帖子 4
阅读权限 10
注册 2006-5-30
状态 离线
发表于 2007-8-14 12:14  资料  个人空间  短消息  加为好友 
我自己顶上去,大家帮忙看下 啊

顶部
不容错过的IBM 集群技术资源汇总
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-8-16 09:31  资料  个人空间  短消息  加为好友 
1、你觉得shell是什么?是程序吗?www.linuxeden.comoN$bBIwa@
2、我觉得你断章取义了,这句话只是为了说明在system函数执行时,父进程中该信号的递送应当阻塞





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-17 03:06

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.060596 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP