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 管道

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

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

写端存在性对读端的影响

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

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

读端存在性对写端的影响

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

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

相关推荐
丰锋ff1 小时前
压缩命令笔记
linux
白山编程大哥1 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛139246256731 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白1 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米1 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
GeW2 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
by209992 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
尼喃3 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室3 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
cq林志炫3 小时前
两个Linux服务器之间同步文件
linux·运维·服务器