千家信息网

Linux进程间通信的方式是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"Linux进程间通信的方式是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux进程间通信的方式是什么"吧!·进程间通信:操作系
千家信息网最后更新 2026年10月31日Linux进程间通信的方式是什么

本篇内容主要讲解"Linux进程间通信的方式是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux进程间通信的方式是什么"吧!

·进程间通信:操作系统为系统提供的用于实现进程间通信的方式

进程之间是无法直接通信的,因为每个进程都有独立的虚拟地址空间,访问的都是自己的虚拟地址,因此进程具有独立性,无法直接通信

根据通信场景的不同,因此提供了多种不同的通信方式

进程间通信方式种类:管道、共享内存、消息队列、信号量

·管道

特性:半双工通信--可以选择方向的单向通信

本质:在内核中开辟一块缓冲区(内核空间中的一块内存)

原理:多个进程通过访问同一块内核中的缓冲区实现通信(复制缓冲区的操作句柄)

分类:匿名管道:缓冲区没有标识符,只能用于具有亲缘关系的进程间通信

命名管道:缓冲区具有标识符,可用于同一主机上任意的进程间通信

linux下一切皆文件--所有东西都是当做文件一样进行操作(包括管道),通过IO操作完成对管道的访问

·匿名管道

返回值:成功返回0;失败返回-1

特性:只能用于具有亲缘关系的进程间通信

匿名管道没有标识符,无法被其他进程找到,只能通过子进程复制父进程的方式获取到操作句柄实现通信

读写特性:若管道中没有数据,则read会阻塞

若管道中数据满了,则write会阻塞

所有的管道的读端被关闭,则继续write则会触发异常,导致进程崩溃退出

所有的管道的写端被关闭,则继续read则会读完数据后返回0,不再阻塞

注:管道是半双工通信,在通信时,一旦选定了 方向,应将不使用的那一端关闭。

· 命名管道:本质是 内核中的一块缓冲区,具有标识符,可以被其他进程找到,因此可用于同一主机上的任意进程间通信

命名管道的标识符就是一个可见于文件系统的管道类型文件

多个进程通过打开同一个管道文件,访问同一块内核中的缓冲区实现通信

命令操作:mkfifo filename 创建一个命名管道文件

函数操作:int mkfifo(const char *pathname, mode_t mode);

pathname:文件名称;mode:创建权限

返回值:成功返回0;失败返回-1

·总结:管道的本质:内核空间中的一块缓冲区

原理:多个进程通过访问同一块缓冲区实现数据传输

分类:匿名管道、命名管道

匿名管道:只能用于具有亲缘关系的进程间通信

命名管道:可以用于同一主机上任意进程间通信

特性:①半双工通信--可以选择方向的单向通信

提供字节流传输服务:有序的、可靠的、基于连接的一种流式传输

基于连接:所有读端关闭则write异常;所有写端关闭则read返回0

②自带同步与互斥:

同步:通过同一时间进程对临界资源的唯一访问实现访问操作安全

互斥:通过一些条件判断让进程对临界资源的访问更加合理有序

互斥的体现:对管道进行写入操作的大小不超过PIPE_BUF-4096大小,则保证操作的原子性

同步的体现:管道没有数据则read阻塞,管道数据写满则write阻塞

③生命周期随进程:不人为干预情况下,所有打开管道的进程退出后,管道缓冲区被释放

·共享内存:用于实现进程间的数据共享

本质:一块物理内存

原理:开辟一块物理内存空间,多个进程将同一块映射到自己的虚拟地址空间,通过虚拟地址直接进行访问,进而实现数据共享

特性:最快的进程间通信方式,生命周期随内核

共享内存通过虚拟地址直接访问物理内存,实现数据共享,相对于其他方式需要将数据拷贝到内核,使用时拷贝到用户态,少了两次数据拷贝操作

注意事项:对共享内存的操作需要注意安全问题

操作流程:

①创建或打开共享内存

②将共享内存映射到进程的虚拟地址空间

③通过映射的虚拟地址进行各种内存操作

④解除映射关系

⑤删除共享内存

int shmget(key_t key, size_t size, int shmflg);

key:标识符(多个进程通过相同的标识符打开同一块共享内存)

size:创建时所开辟的空间大小(以内存页为单位)

shmflg:打开方式 + 创建权限--IPC_CREAT|IPC_EXCL|0664

返回值: 成功返回一个非负整数--操作句柄;失败返回-1

void *shmat(int shmid, const void *shmaddr, int shmflg);

shmid:shmget返回的操作句柄

shmaddr:映射地址,通常设置为NULL

shmflg:映射成功后的访问方式;SHM_RDONLY-只读;0-读写

返回值:成功则返回映射后的首地址;失败返回(void *)-1

int shmdt(const void *shmaddr);

shmaddr:映射后的首地址

返回值:成功返回0;失败返回-1

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmid:shmget返回的操作句柄

cmd:操作类型--IPC_RMID 标记共享内存为被销毁

buf:对于IPC_RMID,成功返回0,失败发返回-1

·消息队列

本质:内核中的一个优先级队列,多个进程通过访问同一个队列,向队列中添加或者获取节点而实现进程间的数据块传输

特性:自带同步与互斥,生命周期随内核

·信号量

本质:内核中的一个计数器 + pcb等待队列

作用:用于实现进程间的同步与互斥,协调进程对临界资源的访问

P操作:计数器-1,判断若计数小于0则阻塞进程

V操作:计数器+1,唤醒一个阻塞的进程

通过自身的计数器对资源进行计数,通过计数判断进程对资源的获取是否合理,不合理则阻塞。等待产生一个资源之后,唤醒阻塞的进程

同步的实现:通过计数器对资源进行计数,在获取资源之前进行P操作

互斥的实现:计数器为1,表示资源只有一个,进程访问资源之前进行P操作,访问完毕后进行V操作

到此,相信大家对"Linux进程间通信的方式是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

进程 管道 通信 内存 数据 方式 内核 地址 缓冲区 缓冲 资源 阻塞 成功 文件 标识 标识符 空间 多个 本质 特性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 广东猪兼强互联网科技有限公司 北京路客互联网科技有限公司 互联网科技卖菜 金融科技与互联网金融 青岛互联网科技公司 互联网 的科技创新 互联网科技logo 互联网金融 科技创新 佰商互联网科技有限公司 互联网金融科技委员会 浙江互联网科技研学营 花神(南京)互联网科技有限公司 宜昌元轩互联网科技有限公司 河南住房之家互联网科技 广州新华互联网科技学校电竞方面 领航科技大厦互联网公司 本届互联网大会上的黑科技 2021世界互联网领先科技成果发布 中国新注册互联网科技 云电互联网科技 上海电发互联网科技有限公司 哈尔滨新华互联网科技学院 佳云科技和互联网广告 众安科技工业互联网合作 互联网金融科技元年 梅州GM互联网络科技有限公司 福建互联网展示科技馆设计 上海互联网科技园景观 互联网科技企业文化
0