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



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

在看APUE10.18这节看调用system函数的程序时,有个问题向大家讨教。以下时程序的简单描述:www.linuxeden.com |3Bh3g/rba
sig_int(int),sig_chld(int);Linux伊甸园论坛6Q
j|9sxBs~;]

main()
,HtB
['Q!y#H6Iwww.linuxeden.com
{
Lzq'wa:|6}signal(SIGINT,sig_int);&^        XEC2|nd:t#n
signal(SIGCHLD,sig_CHLD);f        MdV"H)uTc
system("/bin/ed");}Linux伊甸园论坛.G6B3{b3Q^&e?a)o
书上说这个程序的过程是:a.out(父进程)fork出一个shell处理命令,然后在shell上fork一个进程那就是ed。
NJ,Q:tF|!]Fc#~ JLinux伊甸园论坛/CAJxKS"|0o
在解释这个程序是有这么一段话:“当编辑程序终止时,对父进程(a.out进程)产生SIGCHLD信号。父进程捕捉它,执行其处理程序 sig_chld,然后从其返回。但是若父进程正捕捉SIGCHLD信号,那么在system函数执行时,父进程中该信号的递送应当阻塞。实际上,这就是 POSIX所说明的。否则,当system创建的子进程结束时,system的调用者可能错误地认为,它自己的一个子进程结束了。”f
U;Dw"V |/X


A(J!?2O)cANrvDk1、他说当编辑程序终止时,对父进程(a.out进程)产生SIGCHLD信号,编辑程序的父进程不是shell吗,怎么会是a.out呢?
:ZA!w@1jPS3Ph9S2、“当system创建的子进程结束时,system的调用者可能错误地认为,它自己的一个子进程结束了。”system创建的子进程是ed编辑器, system的调用者是a.out,ed结束的时候,是由shell收到SIGCHLD信号的,a.out 怎么会认为自己的子进程结束了呢,a.out没收到信号啊?8s{U.H+x
Z m5C*ae4\&\ k
[ 本帖最后由 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是什么?是程序吗?
G#i(Ye
]2h
2、我觉得你断章取义了,这句话只是为了说明在system函数执行时,父进程中该信号的递送应当阻塞





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



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

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

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