Linux信号-信号可能需要被控制住

写在前面:小生纯业余选手,开此博仅仅是为了积累,纯当笔记来用。如有看官光临小生博客,请不要相信我的代码就是正确的。如果您发现了错误也恳请耽误您一点时间,请您在下面指出来,不胜感激!

如果发现一些笔记的说法完全是错误的请建议我删除!


YY一番:信号是用来中断进程的执行的,有时候当进程在执行某一个任务的时候可能受到来历不明的信号的干扰,而这种干扰可能给结果带来偏差,所以在使用信号的时候要加以控制。

信号的控制主要是通过使用对某段代码屏蔽信号的模型进行的。


如下代码,看信号是如何干扰一个进程的

<span style="font-size:18px;">#include<unistd.h>
#include<stdio.h>
#include<signal.h>

void handle(int s)
{ 
    printf("MNGB signal coming^^^^^^^stop\n");
    sleep(5);
}

int main()
{
    printf("%d\n",getpid());
    signal(SIGUSR1,handle);
    while(1)
    {
        printf("working do not stop me\n");
        sleep(1);
    }
    return 0;
}
</span>

下面看如何让某一段代码免受一些该段代码不需要的信号的干扰

<span style="font-size:18px;">#include<stdio.h>
#include<unistd.h>
#include<signal.h>

void handle(int s)
{
    printf("handling signal\n");
}

int main()
{
    printf("%d\n",getpid());
    signal(SIGUSR1,handle);
    sigset_t sigs;
    
    sigemptyset(&sigs);
    
    sigaddset(&sigs,SIGUSR1);
    
    sigprocmask(SIG_BLOCK,&sigs,0);
    
    while(1)
    {
        printf("working don't call me\n");
        sleep(1);
    }
    sigprocmask(SIG_UNBLOCK,&sigs,0);
    return 0;
}</span>

sigset_t sigs是一个信号存放信号的集合,sigaddset()是一个往信号集合里边加信号的函数,sigprocmask()通过第一个参数来控制是屏蔽还是解除屏蔽信号集合里边的信号。

这里屏蔽了SIGUSR1这个信号,所以当用kill命令向该进程发送SIGUSR1信号的时候被屏蔽的代码段不会被这个信号干扰。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值