iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux进程间通信的方式是什么
  • 232
分享到

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

2023-06-29 03:06:25 232人浏览 八月长安
摘要

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

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

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

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

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

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

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

·管道

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

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

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

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

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

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

·匿名管道

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

返回值:成功返回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进程间通信的方式是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Linux进程间通信的方式是什么

本文链接: https://www.lsjlt.com/news/322167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux进程间通信的方式是什么
    本篇内容主要讲解“Linux进程间通信的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程间通信的方式是什么”吧!·进程间通信:操作系统为系统提供的用于实现进程间通信的方式进...
    99+
    2023-06-29
  • Linux进程间通信的方式
    这篇文章主要介绍“Linux进程间通信的方式”,在日常操作中,相信很多人在Linux进程间通信的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux进程间通信的方式”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • Python进程间的通信方式是什么
    这篇文章主要介绍“Python进程间的通信方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python进程间的通信方式是什么”文章能帮助大家解决问题。什么是进程的通信这里举一个例子接介绍通信...
    99+
    2023-06-29
  • Linux系统进程间的通信方式和原理是什么
    这篇文章给大家介绍Linux系统进程间的通信方式和原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资...
    99+
    2023-06-28
  • Linux进程间的通信方式有哪些
    本篇内容主要讲解“Linux进程间的通信方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程间的通信方式有哪些”吧!进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于...
    99+
    2023-06-16
  • Linux进程间通信的方式有哪些
    本文小编为大家详细介绍“Linux进程间通信的方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux进程间通信的方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.管道管道分为有名管道和无名...
    99+
    2023-06-28
  • Linux进程通信的方法是什么
    本篇内容介绍了“Linux进程通信的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux进程通信具体方法1.管道管道分为有名管...
    99+
    2023-06-28
  • 什么是进程间通信
    这篇文章主要介绍“什么是进程间通信”,在日常操作中,相信很多人在什么是进程间通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是进程间通信”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • golang进程间通信的方法是什么
    Golang中可以使用多种方式进行进程间通信,包括:1. Channel(通道):Golang的Channel是一种用于在协程之间进...
    99+
    2023-08-23
    golang
  • Linux系统进程通信的主要方式是什么
    Linux系统进程通信的主要方式是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。概览进程间通信常见方式如下:管道FIFO消息队列信号量共享内存UNXI域套接...
    99+
    2023-06-28
  • Python进程间通信方式
    目录一、通信方式二、Queue介绍三、方法介绍三、生产者和消费者模型四、什么是生产者消费者模式实现方式一:Queue实现方式二:利用JoinableQueue一、通信方式 进程彼此之...
    99+
    2024-04-02
  • linux进程间的通信方式有哪几种
    这篇文章主要介绍“linux进程间的通信方式有哪几种”,在日常操作中,相信很多人在linux进程间的通信方式有哪几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux进程间的通信方式有哪几种”的疑惑有所...
    99+
    2023-06-20
  • 什么是Linux进程通信
    本篇内容主要讲解“什么是Linux进程通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是Linux进程通信”吧!进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据...
    99+
    2023-06-09
  • Linux-进程间通信
    进程间通信 进程间通信介绍进程间通信目的进程间通信发展进程间通信分类 管道匿名管道匿名管道特点匿名管道读写规则 命名管道创建一个命名管道命名管道的打开规则用命名管道实现server&client通信 system...
    99+
    2023-08-19
    linux 服务器 网络 c++ C语言
  • 【Linux】进程间通信
    目录 1. 进程间通信 1.1. 进程间通信的目的 1.2. 如何实现进程间通信 2. 管道通信 2.1. 匿名管道 2.1.1 创建匿名管道 2.1.2 . 深入理解匿名管道 2.2. 命名管道 2.2.1. 创建命名管道 3. sys...
    99+
    2023-10-26
    linux 运维 服务器 操作系统 进程间通信
  • 进程间的通信方式(六种)
    进程之间的通信 参考文章:https://blog.csdn.net/qq_34827674/article/details/107678226 前提知识:每个进程都有自己的用户空间,而内核空间是每个进程共享的。因此进程之间想要进行通信,...
    99+
    2023-08-18
    linux 运维 服务器 进程线程
  • 常见的Linux进程通信方法是什么
    这篇文章主要为大家分析了常见的Linux进程通信方法是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“常见的Linux进程通信方法是什么”的知识吧。进程虽...
    99+
    2023-06-28
  • python进程间的通信机制是什么
    本文小编为大家详细介绍“python进程间的通信机制是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“python进程间的通信机制是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。进程间通信表示进程之间的数...
    99+
    2023-07-05
  • Linux常见的进程间通信
    目录 管道pipe匿名管道接口介绍示例代码 fifo命名管道接口介绍代码示例匿名管道与命名管道的区别 shm共享内存接口介绍相关指令代码示例特点总结 信号信号量socket...
    99+
    2023-09-05
    linux 服务器 运维
  • Android进程间通信的方式有哪些
    Android进程间通信的方式有以下几种:1. Intent:通过Intent对象进行进程间的通信。可以使用隐式Intent在不同的...
    99+
    2023-10-08
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作