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