#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
void checkmask(void);
int errno_backup;
int main(void)
{
// char buffer[100];
sigset_t blockset;
errno_backup=errno;
sigemptyset(&blockset);// 清空信号集
sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTSTP);
sigprocmask(SIG_SETMASK,&blockset,NULL);//赋值
checkmask();
printf("press any key to continue,");
getchar();
sigaddset(&blockset,SIGTERM);
sigprocmask(SIG_BLOCK,&blockset,NULL);
checkmask();
printf("press any key to continue.");
getchar();
sigdelset(&blockset,SIGINT);
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
checkmask();
printf("press any key to finish.");
getchar();
return 0;
}
//打印信号掩码
void checkmask(void)
{
sigset_t sigset;
if(sigprocmask(0,NULL,&sigset)<0)
{
printf("sigprocmask error\n");
errno=errno_backup;
exit(0);
}
printf("signal mask:");
if(sigismember(&sigset,SIGINT))
printf("SIGINT ");
if(sigismember(&sigset,SIGTSTP))
printf("SIGTSTP ");
if(sigismember(&sigset,SIGTERM))
printf("SIGTERM ");
printf("\n");
errno=errno_backup;
}
/*
sigprocmask()用于检测或改变进程的信号掩码
*/
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
void checkmask(void);
int errno_backup;
int main(void)
{
// char buffer[100];
sigset_t blockset;
errno_backup=errno;
sigemptyset(&blockset);// 清空信号集
sigaddset(&blockset,SIGINT);
sigaddset(&blockset,SIGTSTP);
sigprocmask(SIG_SETMASK,&blockset,NULL);//赋值
checkmask();
printf("press any key to continue,");
getchar();
sigaddset(&blockset,SIGTERM);
sigprocmask(SIG_BLOCK,&blockset,NULL);
checkmask();
printf("press any key to continue.");
getchar();
sigdelset(&blockset,SIGINT);
sigprocmask(SIG_UNBLOCK,&blockset,NULL);
checkmask();
printf("press any key to finish.");
getchar();
return 0;
}
//打印信号掩码
void checkmask(void)
{
sigset_t sigset;
if(sigprocmask(0,NULL,&sigset)<0)
{
printf("sigprocmask error\n");
errno=errno_backup;
exit(0);
}
printf("signal mask:");
if(sigismember(&sigset,SIGINT))
printf("SIGINT ");
if(sigismember(&sigset,SIGTSTP))
printf("SIGTSTP ");
if(sigismember(&sigset,SIGTERM))
printf("SIGTERM ");
printf("\n");
errno=errno_backup;
}
/*
sigprocmask()用于检测或改变进程的信号掩码
*/