#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
void doSig(int num)
{
printf("i am doSig\n");
printf("%d\n",num);
}
void printSigset(const sigset_t *s)
{
for(int i = 1;i < 32;i++)
{
if(sigismember(s,i) == 1)
printf("1");
else
printf("0");
}
printf("\n");
}
int main(int argc, char **argv)
{
sigset_t p;
printf("sizeof sigset_t = %d\n",sizeof(sigset_t));
sigemptyset(&p);
sigaddset(&p,SIGQUIT);// ctrl + z
sigprocmask(SIG_BLOCK,&p,NULL);// 设置阻塞信号集
struct sigaction s;
s.sa_handler = doSig;
s.sa_flags = 0;
sigemptyset(&s.sa_mask); // sa_mask 时一个临时的值,执行完handler函数之后,就不起作用了 mask |= sa_mask
sigaction(SIGINT,&s,NULL);
while(1)
{
sleep(1);
sigpending(&p);
printSigset(&p);
}
return 0;
}
sizeof sigset_t = 128
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
0000000000000000000000000000000
^\0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
^\^\0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
^Ci am doSig
2
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
0010000000000000000000000000000
![]()