日期:2014-05-16  浏览次数:20658 次

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页。