1
我讀了「APUE」,我發現10.11的例子不能創建正確的答案。 的10.11文件是:你好,關於信號的「APUE」10.11的來源
static void sig_quit(int);
int main(void)
{
sigset_t newmask, oldmask, pendmask;
if (signal(SIGQUIT, sig_quit) == SIG_ERR)
err_sys("can't catch SIGQUIT");
sigemptyset(&newmask);
sigaddset(&newmask, SIGQUIT);
/* block SIGQUIT and save current signal mask */
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
err_sys("SIG_BLOCK error");
sleep(5); /* SIGQUIT here will remain pending */
if (sigpending(&pendmask) < 0)
err_sys("sigpending error");
if (sigismember(&pendmask, SIGQUIT))
printf("\nSIGQUIT pengding\n");
/* reset signal mask which unblocks SIGQUIT */
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) > 0)
err_sys("SIG_SETMASK error");
printf("SIGQUIT unblocked\n");
sleep(5); /* SIGQUIT here will terminate with core file */
exit(0);
}
static void sig_quit(int signo)
{
printf("caught SIGQUIT\n");
if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)
err_sys("can't reset SIG_QUIT");
return ;
}
當我在執行CTRL + C少5秒./a.out和鍵,程序將結束的時候了。 如果在「APUE」以正確的方式工作,它會打印:
^\
SIGQUIT pending
caught SIGQUIT
SIGQUIT unblocked
^\Quit(coredump)
我是一個新的學習signal.please我怎麼明白爲什麼? 當出現其他錯誤時,我可以使用gdb。但信號,所以請,謝謝 我在Ubuntu 10.04
非常感謝 – lxgeek 2011-04-13 09:09:02