当前位置: 技术问答>linux和unix
signal的处理函数问题
来源: 互联网 发布时间:2016-01-07
本文导语: 有些例子: void sig_cld() { pid_t pid; int status; if (signal(SIGCLD,sig_cld)!= -1) { pid = wait(&status); printf("%dn",pid); } } 为什么sig_cld()中还要调用一次signal(SIGCLD,sig_cld) ...
有些例子:
void sig_cld() {
pid_t pid;
int status;
if (signal(SIGCLD,sig_cld)!= -1) {
pid = wait(&status);
printf("%dn",pid);
}
}
为什么sig_cld()中还要调用一次signal(SIGCLD,sig_cld)
void sig_cld() {
pid_t pid;
int status;
if (signal(SIGCLD,sig_cld)!= -1) {
pid = wait(&status);
printf("%dn",pid);
}
}
为什么sig_cld()中还要调用一次signal(SIGCLD,sig_cld)
|
为了避免不可靠信号,早期的unix版本中,在进程每次接到信号对其进行处理时,随即将该信号的动作复位为默认值SIG_DFL,所以在接收到信号的处理函数中立即再设置信号处理函数,防止以前的函数设置丢失!
但按照楼主这样些有可能执行两次处理函数,应该在wait后在设置signal。
情参见《unix环境高级编程 2版》248页。
但按照楼主这样些有可能执行两次处理函数,应该在wait后在设置signal。
情参见《unix环境高级编程 2版》248页。