1.信号集,其中1-31是不可靠的信号,其后的是可靠的信号。
#include<stdio.h>
#include<signal.h>
#define E_MSG(str, value) do{perror(str); return (value);} while(0)
int main(void){
sigset_t set;
sigemptyset(&set);
sigaddset(&set, 2);
sigaddset(&set, 3);
int value = sigismember(&set, 3);
if(value == -1) E_MSG("sigismember", -1);
if(value)
printf("signum 3 is a member of set\n");
else
{
printf("None\n");
}
return 0;
}
2.信号的阻塞
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#define E_MSG(str, value) do{perror(str); return (value);} while(0)
void handler(int n){
printf("get signal: %d\n", n);
return;
}
int main(void){
sigset_t set, oset;
sigemptyset(&set);
signal(2, handler);
signal(3, handler);
signal(45, handler);
sigaddset(&set, 2);
sigaddset(&set, 3);
sigaddset(&set, 45);
//将信号集作为进程的信号掩码集,进行阻塞操作
int block_set = sigprocmask(SIG_SETMASK, &set, &oset);
if(block_set == -1) E_MSG("sigprocmask", -1);
sleep(30);
block_set = sigprocmask(SIG_SETMASK, &oset, NULL);
while(1);
return 0;
}
信号2和信号3 将被阻塞30秒钟,随后解除阻塞,可以调用该命令终止程序。









网友评论