[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
char *pname;
static volatile sig_atomic_t got_sig_int = 0;
static void handler(int sig)
{
if (sig == SIGUSR1)
got_sig_int = 1;
else
printf ("%s: signal %d caught\n", pname, sig);
}
int main(int argc, char *argv[])
{
int n;
pname = argv[0];
printf ("my pid : %d\n", (long)getpid());
sigset_t block_mask;
for (n = 1; n < NSIG; n++) //所有的信号都使用同一个处理函数
(void)signal(n, handler); //忽略错误(SIGKILL 和 SIGSTOP 不会被安装)
sigfillset(&block_mask); // 屏蔽所有信号,除了 SIGKILL 和 SIGSTOP
sigprocmask(SIG_SETMASK, &block_mask, NULL);
sigset_t unblock_mask;
sigemptyset (&unblock_mask);
sigaddset (&unblock_mask, SIGUSR1);
if (sigprocmask(SIG_UNBLOCK, &unblock_mask, NULL) == -1) { //不屏蔽第 10 号信号
perror("sigprocmask");
exit (EXIT_FAILURE);
}
while(!got_sig_int) //等待第 10 号信号
continue;
printf("signal SIGUSER1 caught.\n");
return 0;
}