进程之间的通信方式有哪些?
进程之间的通信方式
进程之间的通信方式主要有如下几种:
管道、命名管道、信号、信号量、消息队列、共享内存、套接字socket
管道
管道这种通讯方式有两种限制,一是半双工的通信,数据只能单向流动,二是只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
管道可以分为两类:匿名管道和命名管道。匿名管道是单向的,只能在有亲缘关系的进程间通信;命名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
信号
信号是一种比较复杂的通信方式,信号可以在任何时候发给某一进程,而无需知道该进程的状态。
Linux系统中常用信号:
(1)SIGHUP:用户从终端注销,所有已启动进程都将收到该进程。系统缺省状态下对该信号的处理是终止进程。
(2)SIGINT:程序终止信号。程序运行过程中,按Ctrl+C
键将产生该信号。
(3)SIGQUIT:程序退出信号。程序运行过程中,按Ctrl+\\
键将产生该信号。
(4)SIGBUS和SIGSEGV:进程访问非法地址。
(5)SIGFPE:运算中出现致命错误,如除零操作、数据溢出等。
(6)SIGKILL:用户终止进程执行信号。shell下执行kill -9
发送该信号。
(7)SIGTERM:结束进程信号。shell下执行kill 进程pid
发送该信号。
(8)SIGALRM:定时器信号。
(9)SIGCLD:子进程退出信号。如果其父进程没有忽略该信号也没有处理该信号,则子进程退出后将形成僵尸进程。
信号量
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列
消息队列是消息的链接表,包括Posix消息队列和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
Socket
与其他通信机制不同的是,它可用于不同机器间的进程通信。
优缺点
管道:速度慢,容量有限;
Socket:任何进程间都能通讯,但速度慢;
消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;
信号量:不能传递复杂消息,只能用来同步;
共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。
进程之间的通信方式有哪些?相关推荐
- 【网络通信与信息安全】之深入解析进程之间的通信方式
一.信号 Signal 信号是 Linux 系统响应某些条件而产生的一个事件,由操作系统事先定义,接收到该信号的进程可以采取自定义的行为,这是一种"订阅-发布"的模式. 信号来源分 ...
- 进程之间的通信方式-共享内存
共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.原理图如下: 共享内存的实现分 ...
- html 如何实现一条竖线边上有 刻度_记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选...
作者:帅地 有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好.想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着"背"来记忆的,所 ...
- 记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背
有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好.想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着"背"来记忆的,所以今天的这篇 ...
- 进程、线程之间的通信方式
一.进程间的通信方式 管道( pipe ) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 调用pipe函数,会在内核中开辟出一 ...
- python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- 进程间基于消息队列的通信_Linux 进程间的通信方式
(一)进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就是创建一个进程,在这个 过程中伴随着资源的分配和释放,可以认为进程是一个程序的一次执行过程. (二)进程间通信的概念 ...
- 进程间的通信方式(二):管道Pipe和命令管道FIFO
1.概述 管道是最初的Unix IPC通信,可追溯到1973年的Unix第三版.尽管对于许多操作来说很有用,但它们的根本局限于没有名字,只能由亲缘关系的进程使用.这一点随着FIFO的加入System ...
- step4 . day7 进程间的通信方式
进程间的通信方式: 无名管道(pipe) 有名管道 (fifo) 信号(signal) system v5的进程间通信方式 共享内存(share memory) 消息队列(message queue) ...
- Linux 进程 | 进程间的通信方式
文章目录 管道 匿名管道 pipe 命名管道 FIFO 共享内存 共享内存的使用流程: 消息队列 信号量 套接字 在之前的博客中讲过,虚拟空间出现的其中一个目的就是解决 进程没有独立性,可能访问同一块 ...
最新文章
- 独家 | 一文读懂数据质量和验证检查(附代码)
- lua自动化脚本关于文本读写和特殊不可见字符转换的处理
- PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
- 人工智能听了很多遍,都应用在哪些领域了你知道吗?
- java数据库连接类,已经把数据库操作的方法都封装好了
- Android底部导航栏实现(一)之BottomNavigationBar
- 2020年阿里农产品电商报告
- 你离云计算还差一个云管平台(CMP)
- PHP常见缓存技术分析(cache)
- Linux的Application 内存模型---
- RabbitMq学习笔记005---登录rabbitmq报错User can only log in via localhost
- 4.企业应用架构模式 --- Web表现层
- CodeMirror自动提醒配置
- Java基础练习题(一维数组)
- 《麦肯锡方法》读书笔记4
- 实用是计算机知识,实用电脑知识
- 三个基本的布尔逻辑算符是_常用布尔逻辑运算符有哪些
- 微信可以修改微信号了
- 一路狂奔的“幸运咖”,再造下一个“蜜雪冰城”?
- UcosII移植、调度、功能、运行流程解析
热门文章
- 568A以及568B线序
- lvds输入悬空_低压差分信号LVDS学习笔记-模拟/电源-与非网
- 计算机 复制文件格式,电脑u盘文件无法复制的解决方法
- 用python实现弹跳球游戏_Python Tkinter弹跳球类游戏res
- 计算机英语听力,每日英语听力pc版
- python处理excel为饼状图_Python入门进阶:Python绘制饼图到Microsoft Excel
- Little Gyro and Sets(第二届中国计量大学ACM程序设计竞赛个人赛)
- python调用谷歌翻译_python调用谷歌翻译
- Fiddler自动回复器伪造回复
- access查找出生日期年份_access怎样利用出生日期计算年龄呀!