|
|
|
|
 SIGCHLD和waitpid函数疑问 - vvgzjj [ 2005-06-23 22:09 | 686 byte(s)]
 Re: SIGCHLD和waitpid函数疑问 - bbwolf [ 2005-06-26 10:46 | 598 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
在UNIX的system()函数实现过程中,要求在父进程中忽略掉SIGINT和SIGQUIT信号,但是要将SIGCHLD信号阻塞(在子进程中将SIGINT和SIGQUIT信号设为默认,SIGCHLD信号解锁)。子进程执行完毕后,在父进程中调用waitpid(pid_t, &state, 0)。问题:
1、若父进程已被waitpid阻塞,在子进程返回时,此时在父进程中SIGCHLD被阻塞(BLOCK),父进程收不到SIGCHLD信号,waitpid()函数能否正确返回,收集到子进程的信息?
2、waitpid若能正确完成,在以后父进程中,将SIGCHLD信号UNBLOCK,用sigprocmask()函数解锁,书上说,在sigprocmask()函数返回以前,会将以前阻塞的信号发送给进程,父进程是否还能收到SIGCHLD信号?若能收到何必在开始时将SIGCHLD进程阻塞。
望高手能予回答。请勿嘲笑。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
1、若父进程已被waitpid阻塞,在子进程返回时,此时在父进程中SIGCHLD被阻塞(BLOCK),父进程收不到SIGCHLD信号,waitpid()函数能否正确返回,收集到子进程的信息?
2、waitpid若能正确完成,在以后父进程中,将SIGCHLD信号UNBLOCK,用sigprocmask()函数解锁,书上说,在sigprocmask()函数返回以前,会将以前阻塞的信号发送给进程,父进程是否还能收到SIGCHLD信号?若能收到何必在开始时将SIGCHLD进程阻塞。
=============================
信号被block后就不能处理这个信号了,直到被unblock,它立即进出信号处理程序。至于waitpid,第一个参数可以设置具体处理哪个进程,最后一个参数可以设置是否阻塞。
|
|
|
[Original]
[Print]
[Top]
|
|
|