进程之间的通信方式

进程之间的通信方式主要有如下几种:
管道、命名管道、信号、信号量、消息队列、共享内存、套接字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:任何进程间都能通讯,但速度慢;

  • 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;

  • 信号量:不能传递复杂消息,只能用来同步;

  • 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。

进程之间的通信方式有哪些?相关推荐

  1. 【网络通信与信息安全】之深入解析进程之间的通信方式

    一.信号 Signal 信号是 Linux 系统响应某些条件而产生的一个事件,由操作系统事先定义,接收到该信号的进程可以采取自定义的行为,这是一种"订阅-发布"的模式. 信号来源分 ...

  2. 进程之间的通信方式-共享内存

    共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.原理图如下: 共享内存的实现分 ...

  3. html 如何实现一条竖线边上有 刻度_记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选...

    作者:帅地 有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好.想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着"背"来记忆的,所 ...

  4. 记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背

    有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好.想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着"背"来记忆的,所以今天的这篇 ...

  5. 进程、线程之间的通信方式

    一.进程间的通信方式 管道( pipe ) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 调用pipe函数,会在内核中开辟出一 ...

  6. python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  7. 进程间基于消息队列的通信_Linux 进程间的通信方式

    (一)进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就是创建一个进程,在这个 过程中伴随着资源的分配和释放,可以认为进程是一个程序的一次执行过程. (二)进程间通信的概念 ...

  8. 进程间的通信方式(二):管道Pipe和命令管道FIFO

    1.概述 管道是最初的Unix IPC通信,可追溯到1973年的Unix第三版.尽管对于许多操作来说很有用,但它们的根本局限于没有名字,只能由亲缘关系的进程使用.这一点随着FIFO的加入System  ...

  9. step4 . day7 进程间的通信方式

    进程间的通信方式: 无名管道(pipe) 有名管道 (fifo) 信号(signal) system v5的进程间通信方式 共享内存(share memory) 消息队列(message queue) ...

  10. Linux 进程 | 进程间的通信方式

    文章目录 管道 匿名管道 pipe 命名管道 FIFO 共享内存 共享内存的使用流程: 消息队列 信号量 套接字 在之前的博客中讲过,虚拟空间出现的其中一个目的就是解决 进程没有独立性,可能访问同一块 ...

最新文章

  1. 独家 | 一文读懂数据质量和验证检查(附代码)
  2. lua自动化脚本关于文本读写和特殊不可见字符转换的处理
  3. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
  4. 人工智能听了很多遍,都应用在哪些领域了你知道吗?
  5. java数据库连接类,已经把数据库操作的方法都封装好了
  6. Android底部导航栏实现(一)之BottomNavigationBar
  7. 2020年阿里农产品电商报告
  8. 你离云计算还差一个云管平台(CMP)
  9. PHP常见缓存技术分析(cache)
  10. Linux的Application 内存模型---
  11. RabbitMq学习笔记005---登录rabbitmq报错User can only log in via localhost
  12. 4.企业应用架构模式 --- Web表现层
  13. CodeMirror自动提醒配置
  14. Java基础练习题(一维数组)
  15. 《麦肯锡方法》读书笔记4
  16. 实用是计算机知识,实用电脑知识
  17. 三个基本的布尔逻辑算符是_常用布尔逻辑运算符有哪些
  18. 微信可以修改微信号了
  19. 一路狂奔的“幸运咖”,再造下一个“蜜雪冰城”?
  20. UcosII移植、调度、功能、运行流程解析

热门文章

  1. 568A以及568B线序
  2. lvds输入悬空_低压差分信号LVDS学习笔记-模拟/电源-与非网
  3. 计算机 复制文件格式,电脑u盘文件无法复制的解决方法
  4. 用python实现弹跳球游戏_Python Tkinter弹跳球类游戏res
  5. 计算机英语听力,每日英语听力pc版
  6. python处理excel为饼状图_Python入门进阶:Python绘制饼图到Microsoft Excel
  7. Little Gyro and Sets(第二届中国计量大学ACM程序设计竞赛个人赛)
  8. python调用谷歌翻译_python调用谷歌翻译
  9. Fiddler自动回复器伪造回复
  10. access查找出生日期年份_access怎样利用出生日期计算年龄呀!