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。
N J,Q:tF|!]Fc#~JLinux伊甸园论坛/C AJxKS"|0o
在解释这个程序是有这么一段话:“当编辑程序终止时,对父进程(a.out进程)产生SIGCHLD信号。父进程捕捉它,执行其处理程序 sig_chld,然后从其返回。但是若父进程正捕捉SIGCHLD信号,那么在system函数执行时,父进程中该信号的递送应当阻塞。实际上,这就是 POSIX所说明的。否则,当system创建的子进程结束时,system的调用者可能错误地认为,它自己的一个子进程结束了。”f
U;Dw"V|/X
A(J!?2O)cA NrvDk1、他说当编辑程序终止时,对父进程(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 编辑 ]
|