Linux进程间通信机制

2023-11-03

Linux下的通信手段基本上是从Unix平台上的进程通信机制继承而来。

Linux下的进程通信通信机制主要包括:

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
  2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
  3. 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
  5. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
  6. 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

 

一般来说,linux下的进程包含以下几个关键要素:

  • 有一段可执行程序;
  • 有专用的系统堆栈空间;
  • 内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;
  • 具有独立的存储空间
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux进程间通信机制 的相关文章

  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 如何在 shell 脚本中操作 $PATH 元素?

    有没有一种惯用的方法从类似 PATH 的 shell 变量中删除元素 这就是我想要的 PATH home joe bin usr local bin usr bin bin path to app bin and remove or rep
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 针对库编译时出现“未定义引用”错误

    我在代码中添加了第三方库 但在运行时遇到这样的错误make 请帮助我理解这个错误 text 0x9b4 undefined reference to snd strerror home bet Tent tun app Common hl
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute

随机推荐

  • 领域驱动设计DDD

    什么是领域驱动设计 DDD 领域驱动设计 Domain Driven Design 简称 DDD 是一种软件开发方法论 旨在解决复杂业务领域的建模和实现问题 DDD 强调将业务领域作为软件设计和开发的核心 通过深入理解业务领域的知识 将其反
  • Python 笔记 — 异常

    目录 一 概念 二 常见种类 三 处理 1 捕获异常 2 完整捕获异常 3 异常的传递 4 抛出异常 一 概念 就是程序运行时发生错误的信号 当 Python 检测到一个错误时 解释器就无法继续执行了 反而出现了一些错误的提示 这就是所谓的
  • static class 静态类

    在一个类中创建另外一个类 叫做成员内部类 这个成员内部类可以静态的 利用static关键字修饰 也可以是非静态的 由于静态的内部类在定义 使用的时候会有种种的限制 所以在实际工作中用到的并不多 在开发过程中 内部类中使用的最多的还是非静态地
  • PAT Basic Level 1045 快速排序(思维)

    题目链接 点击查看 题目描述 著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素
  • c++:一个程序多个源/头文件

    1 一个程序 一个源文件的做法 include
  • Java基础--- 重载和重写 Overloading and Overriding

    Java基础 重载和重写 Overloading and Overriding 重载 Overload 重写 Override 重载和重写的区别 重载 Overload 重载 overloading 是在一个类里面 方法名字相同 而参数不同
  • Windows10下Colmap的安装与调试、三维重建实践及中间结果输出

    Windows10下Colmap的安装与调试 三维重建实践及中间结果输出 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 Windows10下Colmap的安装与调试 三维重建实践及中间结果输出 1 Colmap
  • 在windows上编译Inlong所遇到的问题

    1 Hadoop相关的问题 在windows中 由于Inlong的很多单元测试用例都需要用到hadoop的相关组件进行测试 可以采用winunits配合测试 winutils是windows上专门配合hadoop和yarn测试的工具 在gi
  • Windows Server 2012 R2无法正常安装vmtools

    情形 在VMWare虚拟机上安装Windows Server 2012之 后安装VMWare Tools时报如下错误信息 解决方法 在VMWare虚拟机中的Windows Server 2012操作系统上安装Windows8 1 KB291
  • element admin 中动态设置快捷导航(标签栏导航)meta标签和title标签

    因为和原生的交互是需要h5这边来提供meta标签的来是来判断要不要显示分享按钮 所有就需要手动设置meta标签 标题和内容 这种情况就是我的左侧菜单只有一个 但是我在列表页面打开每一个连接的时候 都是新开一个标签栏导航 标题是自定义的 比如
  • java项目切换数据库Mysql到Oracle 11g(包含表结构转换与数据迁移)

    0 前言 最近公司要求把项目数据库从mysql换成Oracle 目前总算是快完成了 就写个帖子记录下遇到的问题 网上的教程五花八门 同时给一些也在寻找方法的人一些帮助 有什么问题可以在评论里讨论 使用sqldeveloper迁移表和数据比c
  • window.addEventListener监听事件在vue组件中使用

    最近在搞收银台页面调用终端机的项目 上面领导只是给了一个原生js的demo 让用vue写页面 搞了一天没怎么出成果 最后是监听事件的锅 别的不多说 直接上代码 写在created里面就好了 ok啦 注意 有个坑 event那里必须写成箭头函
  • 融云猿桌派备忘录,那些被程序员 Pick 的工作方式

    3 月 10 日 猿桌派 第 2 季第 1 期正式开播 关注 融云全球互联网通信云 了解更多 节目主理人融云技术 VP 臧其龙与 Grab 高级研发宋清晨 VMware iOS MacOS 开发尚传人就 中外互联网公司面面观 展开讨论 嘉宾
  • js 判断数据类型最常用的方法

    1 最常用方法 typeof typeof 是最常用判断数据类型的方法 只能判断基本数据类型 返回值有7种 number string boolean null undefined symbol es6新增 2 判断对象类型 instanc
  • 字节跳动头条2022测试开发岗 3+1 面经+经验分享(收到offer,入职月薪30K)

    现在 招聘黄金时间已经来临 在网上看了很多大佬的面经 也加了很多交流群 受到了很多朋友的提点 今天终于轮到我来分享面经啦 之前面试了几家公司 最后在八月初拿到了字节跳动测试岗的 offer 这里总结一下自己的面经和复习历程 顺便谈谈我的一些
  • php基础控制器,HTTP控制器

    HTTP控制器 由 学院君 创建于4年前 最后更新于 1年前 版本号 1 7403 views 4 likes 0 collects 1 简介 将所有的请求处理逻辑都放在单个routes php中肯定是不合理的 你也许还希望使用控制器类组织
  • java http 传输中的转义_小猿圈Java学习-URL地址的组成格式

    URL的全称是Uniform Resource Locator 意思是统一资源定位符 俗称网络地址或网址 网络上的每个文件及接口 都有对应的URL网址 它规定了其他设备如何通过一系列的路径找到自己 犹如网购的包裹一路送至收货地址所描述的地点
  • 疯壳-鸿蒙OS-工具安装指南

    1 将Linux shell改为bash 1 查看shell是否为bash 在终端运行如下命令 ls l bin sh 如果为显示为 bin sh gt bash则为正常 否则请按以下方式修改 方法一 在终端运行如下命令 然后选择 no s
  • Weblogic远程代码执行漏洞(CVE-2020-14645)

    简介 WebLogic是美国Oracle公司出品的一个application server 确切的说是一个基于JAVAEE架构的中间件 WebLogic是用于开发 集成 部署和管理大型分布式Web应用 网络应用和数据库应用的Java应用服务
  • Linux进程间通信机制

    Linux下的通信手段基本上是从Unix平台上的进程通信机制继承而来 Linux下的进程通信通信机制主要包括 管道 Pipe 及有名管道 named pipe 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制 因此 除具