【Linux】进程信号_1

文章目录


八、进程信号

1.信号

信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。

常见信号:

当信号产生时,可选的处理方式有三种:①忽略此信号。②执行该信号的默认处理动作。③自定义处理信号,这种方式称为捕捉(Catch)一个信号。

可以使用 kill -9 杀掉指定进程。

kill -2 可以终止指定进程。不是杀死的。

接下来我们让进程对2号信号做出自定义行为。需要使用 signal 函数。

Makefile:

cpp 复制代码
testSig:Signal.cc
	g++ -o $@ $^ -std=c++11
.PHONY:clean
clean:
	rm -f testSig

Signal.cc

cpp 复制代码
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
using namespace std;

void handler(int signo)
{
    // 打印收到的信号
    cout << "get a signal : " << signo << endl;
}

int main()
{
    signal(SIGINT, handler);
    
    while (true)
    {
        cout << "I am activing, pid : " << getpid() << endl;
        sleep(1);
    }
    return 0;
}

此时进程当接收到2号信号时,就输出了一句话并没有终止进程。

cpp 复制代码
// 忽略信号 ignore
    signal(SIGINT, SIG_IGN);

当 signal 函数这样设置时,就代表将 SIGINT 信号忽略。
信号可以由 kill 命令产生,也能够从键盘上产生。比如 键盘上的 Ctrl + C 会被操作系统解释成2号信号。


未完待续

相关推荐
小此方2 分钟前
Re:Linux系统篇(二十二)进程篇·七:环境变量的底层溯源、核心获取机制与安全应用
linux·运维·服务器
210Brian5 分钟前
蓝桥杯单片机学习笔记(十四) V2026大模板源代码
单片机·学习·蓝桥杯
Cloud_Shy6188 分钟前
Linux 系统权限知识及应用实践
linux·运维·服务器·centos·云计算
一氧化二氢.h20 分钟前
Linux手动脚本 vs Dockerfile部署:核心区别与适用场景
linux·运维·服务器
茉莉清茶LG20 分钟前
Xshell成功创建了Ubuntu连接,但是显示虚拟机连接断开了,连接失败。
linux·运维·ubuntu
咸甜适中23 分钟前
rust语言学习笔记Trait(十)PartialOrd、Ord(大小比较)
笔记·学习·rust
小+不通文墨26 分钟前
在树莓派中用*C语言*实现MQTT通信
c语言·经验分享·笔记·嵌入式硬件·学习
笨鸟先飞的橘猫38 分钟前
skynet——服务发现学习
学习·服务发现
_Emma_38 分钟前
【QCOM】CAMSS架构中CSi与CSIPHY驱动结构
linux·图像处理·视频编解码
程序员JerrySUN39 分钟前
Jetson边缘嵌入式实战课程第五讲:Jetson Secure Boot - 安全启动
android·linux·服务器·人工智能·安全·unity·游戏引擎