signal的处理函数问题
有些例子:
void sig_cld() {
pid_t pid;
int status;
if (signal(SIGCLD,sig_cld)!= -1) {
pid = wait(&status);
printf( "%d\n ",pid);
}
}
为什么sig_cld()中还要调用一次signal(SIGCLD,sig_cld)
------解决方案--------------------为了避免不可靠信号,早期的unix版本中,在进程每次接到信号对其进行处理时,随即将该信号的动作复位为默认值SIG_DFL,所以在接收到信号的处理函数中立即再设置信号处理函数,防止以前的函数设置丢失!
但按照楼主这样些有可能执行两次处理函数,应该在wait后在设置signal。
情参见《unix环境高级编程 2版》248页。