#include <signal.h>
#include <stdio.h>
static void sig_quit(int);
int main(void)
{
sigset_t newmask, oldmask, pendmask;
if (signal(SIGQUIT, sig_quit) == SIG_ERR)
printf("%m\n"), exit(-1);
sigemptyset(&newmask);
sigaddset(&newmask, SIGQUIT);
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
printf("%m\n"), exit(-1);
sleep(5);
if (sigpending(&pendmask) < 0)
printf("%m\n"), exit(-1);
if (sigismember(&pendmask, SIGQUIT))
printf("\nSIGQUIT pending\n");
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
printf("%m\n"), exit(-1);
printf("SIGQUIT unblocked\n");
sleep(5);
exit(0);
}
static void sig_quit(int signo)
{
printf("caught SIGQUIT\n");
if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)
printf("%m\n"), exit(-1);
}
apue-手贱还是想谢谢信号未决pending
最新推荐文章于 2021-03-23 15:01:05 发布