【Linux操作系统】信号产生

一、信号概念

是什么?

Linux系统提供的让用户(进程)给其他进程发送异步信息的一种方式,注意,信号与信号量没有任何关系。
1、进程可以识别信号并作处理;
2、信号到来时,如果此时有更重要的事情要处理,那么到来的信号要临时保存,即在合适的时候处理;
3、信号的产生是随时的,不能准确预料,所以信号是异步发送的;
4、信号的产生,是由别的进程产生的,当前的进程收到这个信号之前,在做其他的事情,是并发的。

为什么?

因为系统要求进程要有随时响应外部信号的能力,并作出反应。

怎么办?

准备->信号产生->信号保存->信号处理

准备:
1️⃣常见信号:
在这里插入图片描述
数字和名字都可以识别信号,名字其实是宏。从34开始是实时信号。注意,没有32、33信号。

2️⃣信号的处理方式
有:默认、自定义、忽略

默认,就是按原来信号的处理方式进行处理
比如:下面代码死循环用2号信号终止,终止是2号信号的默认处理方式

int main()
{
   
    while(true)
    {
   
        cout << "I am acting..., pid: " << getpid()<<endl;
        sleep(1);
    }
    return 0;
}

在这里插入图片描述

自定义是由用户来决定信号的处理方式,与信号的默认处理方式不同。2号信号是终止进程,用户可以让它的处理方式通过函数变成打印一句话和终止进程,终止进程的退出码为100,再把函数给系统调用接口signal。自定义的方式也叫信号的捕捉。
在这里插入图片描述

void handler(int sig)
{
   
    cout << "I am a sig, sig: " <<sig<<endl;
    exit(0);
}
int main()
{
   
    signal(2, handler);

    while(true)
    {
   
        cout << "I am acting..., pid: " << getpid()<<endl;
        sleep(1);
    }
    return 0;
}

在这里插入图片描述

注意:signal调用完,handler方法不会立即被执行,要收到对应的信号才执行;如果没有收到信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值