[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
static void sig_quit(int signo)
{
printf ("caught SIGQUIT\n");
if (signal(SIGQUIT, SIG_DFL) == SIG_ERR) {
printf ("Can't reset SIGQUIT)");
exit (EXIT_FAILURE);
}
}
int main(int argc, char *argv[])
{
printf ("My pid : %d\n", (long)getpid());
sigset_t newmask, oldmask, pendmask;
if (signal(SIGQUIT, sig_quit) == SIG_ERR) {
perror("signal");
exit (EXIT_FAILURE);
}
//屏蔽 SIGQUIT 并保存当前信号码
sigemptyset(&newmask);
sigaddset (&newmask, SIGQUIT);
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) {
perror("sigprocmask");
exit (EXIT_FAILURE);
}
sleep(8);
if (sigpending(&pendmask) < 0) {
perror("sigpending");
exit (EXIT_FAILURE);
}
if (sigismember(&pendmask, SIGQUIT))
printf ("\nSIGQUIT pending\n");
//取消对 SIGQUIT 的屏蔽
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) {
perror("sigprocmask");
exit (EXIT_FAILURE);
}
printf ("SIGQUIT unblocked\n");
sleep(10); //此处 SIGQUIT 信号生效,并生成 coredump 文件
exit (EXIT_FAILURE);
}