Linux进程通信与信号处理全解析

一、管道的基本特性

1、管道是Linxu中最基础的进程间通信机制,分为无名(匿名)管道和有名管道。 ​

2、管道默认是半双工通信方式,数据只能单向流动。 ​

3、无名管道只能用于具有亲缘关系的进程间通信。

​ 4、管道中的数据读取后会从管道中删除,不支持随机访问。 ​

5、默认情况下,读端无数据时,读进程阻塞;写端管道满时,写进程阻塞。

​ 6、无名管道随进程的退出而消亡;有名管道的文件持久存在于文件系统中,需手动删除。 ​

7、管道一旦创建成功,会返回两个文件描述符,读端对应fd0,写端对应fd1

二、kill命令常用用法

cpp 复制代码
命令格式                            功能说明
kill -l                         查看系统所有的信号
kill -s SIGINT 3115             给PID为3115的进程发送SIGINT信号(使用的是信号名)
kill -2 3124                    给PID为3124的进程发送2号新号(使用的是信号的值)
killall -s SIGINT a.out         给所有名为a.out的进程发送SIGINT信号
killall -2 a.out                给所有名为a.out的进程发送2号信号

三、非实时信号

1、1~31号为非实时信号,也称为不可靠信号 ​

2、每个信号都有对应的一个特定的系统事件 ​

3、所有非实时信号的优先级是相同的 ​

4、就绪队列中的非实时信号响应无固定顺序 ​

5、就绪队列中的多个相同的非实时信号仅响应一次,其余会被丢弃 ​

6、非实时信号中的 SIGKILL 和 SIGSTOP 这两个信号无法被忽略、无法被捕捉、无法被阻塞,只能按照缺省动作进行响应

四 实时信号

1、34~64号为实时信号,也称为可靠信号 ​

2、无具体对应的系统事件 ​

3、实时信号优先级高于非实时信号,实时信号的值越大优先级越高 ​

4、就绪队列中的事实信号按优先级从高到低依次响应 ​

5、就绪队列中的多个相同的实时信号全部都会被响应,不会被丢弃 ​

6、高优先级的信号会打断正在执行的低优先级信号 ​

五、信号实现原理及过程

1、信号本质是Linxu中异步进程间通信的一个机制,用于通知进程发生了异步事件,其无需进程主动轮询,由内核触发处理。 ​

2、信号由硬件(Ctrl+C触发)、软件(alarm定时器函数)或内核异常(段错误)产生。 ​

3、信号生产之后,内核将信号添加到目标进程的挂起队列(私有/共享),并将信号集对应的位置为1,表示该信号处于挂起状态。 ​

4、进程的信号集定义了当前阻塞的信号,若信号被阻塞,会留在挂起队列中,直到阻塞解除。

​ 5、内核在进程从内核态返回用户态时,检查挂起队列中是否有未阻塞的信号,如果有,则取出信号,根据注册的处理动作执行。

​ 5.1 默认动作:信号原本的缺省动作。 ​

5.2 忽略动作:进程显示设置了 SIG_IGN,内核直接丢弃该信号(除SIGKILL 和 SIGSTOP)。 ​

5.3 响应动作:程序中通过signal等函数注册了信号及处理函数,内核会在切换到用户态执行该注册的函数。

相关推荐
码农学院2 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
爱写代码的森8 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
REDcker9 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
ANSIOT11 小时前
安朔科技蓝牙无感开锁方案,靠近自动解锁
网络·科技·物联网
晏宁科技YaningAI11 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
HLC++12 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影13 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码14 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress