day32

第一部分:进程间通信概述

进程间通信的常见方式

· 管道(无名管道、有名管道)

· 信号

· 消息队列

· 共享内存

· 信号灯(信号量)

第二部分:无名管道

  1. 无名管道的特点

· 只能用于具有亲缘关系的进程间通信(如父子进程)。

· 管道本质上是一段位于内核空间的缓存区,读写两端通过文件描述符操作。

  1. 创建函数 pipe

· 创建一段用于进程间通信的内核缓存区。

· 通过两个文件描述符操作管道:读端和写端。

· 成功返回0,失败返回-1。

  1. 管道的读写特性

有写端存在时:

· 管道中有数据:直接读出。

· 管道中无数据:读端阻塞等待,直到有数据写入。

无写端存在时:

· 管道中有数据:直接读出。

· 管道中无数据:读端立即结束,不阻塞等待。

有读端存在时:

· 管道未写满(容量约64K):直接写入。

· 管道已写满:写端阻塞,等待数据被读取后才能继续写入。

无读端存在时:

· 写入数据会产生管道破裂错误,导致进程直接退出。

第三部分:有名管道

  1. 有名管道的特点

· 可用于任意两个进程间通信(无论是否具有亲缘关系)。

· 通过文件系统中的管道文件来标识,进程通过路径名访问。

  1. 阻塞特性

· 读写两端必须同时打开才能继续执行。

· 若只有一端打开(只有读端或只有写端),则该端会阻塞等待,直到另一端加入。

  1. 创建函数 mkfifo

· 在文件系统中创建一个有名管道文件。

· 需指定管道文件的路径和访问权限。

· 成功返回0,失败返回-1。

第四部分:信号

  1. 信号的概念

信号是内核层与应用层之间通信的一种机制,用于通知进程发生了某种事件。

  1. 进程收到信号后的三种处理方式

· 缺省:按照系统默认方式处理信号(如终止进程、忽略等)。

· 忽略:不处理该信号,信号对进程无影响。

· 捕捉:按照用户指定的方式处理信号,即注册自定义信号处理函数。

  1. 常见信号种类

· SIGINT:中断信号(Ctrl+C)

· SIGQUIT:退出信号(Ctrl+\)

· SIGKILL:强制终止信号

· SIGTERM:终止信号

· SIGSTOP:暂停信号

· SIGSEGV:段错误信号

· SIGPIPE:管道破裂信号

· SIGALRM:定时器信号

· SIGCHLD:子进程状态变化信号

第五部分:关键概念辨析

无名管道 vs 有名管道

· 无名管道:仅限亲缘进程,无文件名,通过文件描述符操作。

· 有名管道:任意进程可用,有文件名,通过路径打开操作。

信号 vs 管道

· 信号:异步通信机制,用于通知事件,传输信息量极少。

· 管道:同步通信机制,用于传输数据流,信息量大。

写端存在性对读端的影响

· 写端存在时读端若无数据会阻塞等待。

· 写端不存在时读端若无数据则直接结束(读到文件末尾)。

读端存在性对写端的影响

· 读端存在且管道满时写端阻塞。

· 读端不存在时写端写入会触发管道破裂信号。

相关推荐
德思特7 小时前
Robotaxi规模化加速,“信号难题”如何解决?
经验分享
充电zcx8 小时前
Linux:4:开发工具详解
linux·运维·服务器
星栖与芯8 小时前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
Navigator_Z10 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
统计学小王子11 小时前
数学建模十万个为什么(一)
经验分享·数学建模
陕西企来客11 小时前
企来客科技发布企业知识图谱GEO优化专项服务:从“信息曝光“升级到“实体置信度“
经验分享·ai
码农客栈12 小时前
linux 交叉编译tslib
linux
是隼人12 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
鱼月半12 小时前
两台电脑直连网络不通怎么办?
linux·网络协议
CAYA-12 小时前
模电笔记1.1 半导体基础与 PN 结
经验分享·笔记·学习方法