23,116
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
//信号SIGUSR1的处理函数
void sigusr1_handler(int signo)
{
printf("catch SIGUSR1\n"); //输出提示信息,提示接受到SIGUSR1信号
}
int main()
{
sigset_t sigSet; //信号集
//设置信号处理函数
if (SIG_ERR == signal(SIGUSR1,sigusr1_handler))
{
perror("Can't Set Handler For SIGUSR1!\n");
exit(-1);
}
sigemptyset(&sigSet); //清空信号集
sigaddset(&sigSet,SIGUSR1); //设置SIGUSR1
//屏蔽该信号,与原屏蔽字做 或 操作
if (-1 == sigprocmask(SIG_BLOCK,&sigSet,NULL))
{
perror("fail to set signal-mask\n");
exit(-2);
}
printf("SOGISR1 is not available\n");
sleep(20); //休眠,等待用户发送SIGUSR1信号
//恢复屏蔽的信号,与原屏蔽字做“取反”后“与”操作
if (-1 == sigprocmask(SIG_UNBLOCK,&sigSet,NULL))
{
perror("fail to set signal-mask\n");
exit(-3);
}
printf("SIGUSR1 is available now \n");
sleep(20);
return 0;
}