Linux基础 (十一):进程间通信

       Linux进程间通信(Inter-Process Communication, IPC)是指在不同进程之间交换数据或信息的机制。由于进程间不能直接共享内存,Linux 提供了多种 IPC 机制来实现进程间的通信。主要为:管道、信号量、共享内存、消息队列、套接字。

目录

一、管道

1.1 有名管道

1.1.1 创建有名管道文件

1.1.2 进程A打开管道文件写入数据

1.1.3 进程B打开管道文件读取数据

​1.1.4 进行通信

1.1.5 管道读写机制分析

1.1.6 注意事项

1.1.7 面试题总结

1.2 无名管道

1.2.1 创建无名管道文件

1.2.2 pipe()使用示例

1.2.3 父子进程利用无名管道进行通信

1.2.4 无名管道使用注意事项

二、信号量

2.1 信号量的基本概念(面试题)

2.2 操作信号量的接口介绍

2.2.1 依赖的头文件

2.2.2 创建一个信号量或者获取一个已经存在的信号量

2.2.3 对信号量进行P或者V操作(加或者减1)

2.2.4 对信号量进行初始化或者删除信号量

2.3 自定义实现对信号量的操作

2.4 信号量控制进程示例:两个进程同时使用打印机资源

2.4.1 题目描述

2.4.2 不进行控制

2.4.2 利用信号量进行控制

2.5 面试题

2.5.1 题目描述

2.5.2 控制思路

2.5.3 代码实现


一、管道

      管道可以用来在两个进程之间传递数据,如: ps -ef | grep “bash”, 其中‘|’就是管 道,其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行 过滤。 思考: 如果进程 a 要将从键盘获取的数据循环传递给另一个进程 b, 用已具备的知识思考应该如何完成?

1.1 有名管道

1.1.1 创建有名管道文件

       有名管道可以在任意两个进程之间通信,有名管道创建的方式有两种如下:

1.1.2 进程A打开管道文件写入数据

1.1.3 进程B打开管道文件读取数据

1.1.4 进行通信

需要注意:通信的前提是双方都要打开管道!  使用管道文件时,必须要同时打开俩个文件,且必须有一个是只读文件,另一个是只写文件。只打开一个文件,只打开一个只读或只写文件,会阻塞在open管道文件这里,等到另一个文件打开了,才会执行下面。

如何解决呢?再打开另外一个终端。

1.1.5 管道读写机制分析

1.1.6 注意事项

1.1.7 面试题总结

1.2 无名管道

1.2.1 创建无名管道文件

      无名管道主要应用于父子进程间的通信。 无名管道的创建如下:无名管道,没有名字,只能靠文件描述符,文件描述符不能给到别的进程,只能fork,让子进程拿到数据。因此,应该先创建无名管道,再fork产生子进程。

1.2.2 pipe()使用示例

1.2.3 父子进程利用无名管道进行通信

利用无名管道进行通信:父进程写入数据,子进程读取数据。

1.2.4 无名管道使用注意事项

二、信号量

2.1 信号量的基本概念(面试题)

      信号量(Semaphore)是一种用于同步进程间或线程间访问共享资源的机制。信号量可以用于控制对公共资源的访问,以避免竞争条件和实现互斥。信号量在操作系统中起到非常重要的作用,尤其是在多进程和多线程环境中。

信号量是一种特殊的变量,其值可以用来控制对公共资源的访问。信号量主要有两种类型:

  1. 计数信号量(Counting Semaphore):值可以是非负整数,表示可用资源的数量。
  2. 二进制信号量(Binary Semaphore):也称为互斥量(Mutex),其值只能是0或1,主要用于实现互斥访问。

2.2 操作信号量的接口介绍

2.2.1 依赖的头文件

2.2.2 创建一个信号量或者获取一个已经存在的信号量

semget是可以创建信号量也可以获取已经存在的信号量的,第一个参数是key 两个进程想使用同一个信号量,只要key值相同就可以;第二个参数是创建信号量的个数;第三个参数是标志位,创建信号量的权限。

2.2.3 对信号量进行P或者V操作(加或者减1)

semop对信号量进行P操作或者V操作(信号量加一或者减一)。  

2.2.4 对信号量进行初始化或者删除信号量

意:要对这个联合体在头文件sem.h进行声明。 

semctl既可以初始化信号量 也能销毁信号量,第一个参数是,创建的信号量的id(semget 创建之后的返回值);第二个参数是信号量的下标,信号量的下标从0开始,如果只有一个信号量就为0;第三个参数是初始化信号量(SETVAL),还是删除一个信号量(IPC_RMID)。注意:如果是删除信号量,它会将所有的信号量进行删除。

2.3 自定义实现对信号量的操作

       创建对应的sem.h对信号量的操作函数进行声明,以及对联合体semun进行定义。另外创建sem.c对函数进行具体实现,这样在后面的利用信号量对进程控制时,引入这个头文件,然后直接调用函数即可,非常方便!

static int semid=-1;
void sem_init()
{semid=semget((key_t)1234,1,IPC_CREAT|IPC_EXCL|0600);//1代表创建一个信号量,IPC_CREAT没有就创建,有就获取。IPC_EXCL有就返回-1,因为创建的时候要初始化,所以要加这个。if(semid==-1)//跟据返回值判断信号量是否创建过{semid=semget((key_t)1234,1,0600);//再次获取这个id的信号量 此时的 1和0600都是占位用的,因为前面创建的时候已经定义过了。if(semid==-1){printf("semget err\n");//没有空间了,创建不了了}}else{union semun a;a.val=1;//用联合体来初始化信号量的初始值if(semctl(semid,0,SETVAL,a)==-1)//0代表下标为0的信号量{printf("semctl init err\n"); //初始化信号量失败}}
}
void sem_p()
{struct sembuf buf;//创建结构体buf.sem_num=0;//下标为0,只有一个信号量buf.sem_op=-1;//对信号量进行-1操作buf.sem_flg=SEM_UNDO;//防止进程在进行p操作时突然崩掉,信号量就不会释放了,其他进程一直阻塞住,对信号量进行不了操作,系统在进程进行p操作时会记录下来,如果崩掉,系统会把信号量还原。if(semop(semid,&buf,1)==-1)//这里的1代表只有一个结构体{printf("p err\n");}
}
void sem_v()
{struct sembuff buf;buf.sem_num=0;buf.sem_v=1;buf.sem_flg=SEM_UNDO;if(semop(semid,&buf,1)==-1){printf("v err\n");}
}
void sem_destroy()
{if(semctl(semid,0,IPC_RMID)==-1)//0是占位用,最后一个加不加结构体地址都无所谓,加了也不看。{printf("destroy err\n");}
}

2.4 信号量控制进程示例:两个进程同时使用打印机资源

2.4.1 题目描述

由于打印机同一时刻 只能被一个进程使用,所以输出结果不应该出现 abab,如何控制呢?

2.4.2 不进行控制

A进程使用打印机资源

 B进程使用打印机资源

运行结果

2.4.2 利用信号量进行控制

如何控制?思路?

加入信号量控制的A进程

加入信号量控制的B进程

介绍几个常用命令:

  1. ipcs 可以查看消息队列 共享内存段 信号量
  2. ipcs -s 只查看信号量
  3. ipcrm -s id 删除信号量

利用信号量控制进程之后的结果

2.5 面试题

2.5.1 题目描述

2.5.2 控制思路

2.5.3 代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon 传统缺陷检测

一、电路检测 算子解释 dyn_threshold *dyn_threshold 利用局部阈值分割图像*OrigImage (input_object):原始图像*ThresholdImage (input_object):处理后图像(一般采用滤波处理)*RegionDynThresh (output_object)&#xff1…

操作系统 - 文件管理

文件管理 考纲内容 文件 文件的基本概念;文件元数据和索引节点(inode) 文件的操作:建立,删除,打开,关闭,读,写 文件的保护;文件的逻辑结构;文件的物理结构目录 目录的基…

英语学习笔记24——Give me/us/him/her/them some ...

Give me/us/him/her/them some … 给我/我们/他/她/他们一些…… 词汇 Vocabulary desk n. 课桌(有书桌堂),写字台 复数:desks 搭配:desk mate 同桌    构成:desk mate 桌子上的伙伴 同桌    cl…

[Algorithm][动态规划][简单多状态DP问题][买卖股票的最佳时机 III][买卖股票的最佳时机 Ⅳ]详细讲解

目录 1.买卖股票的最佳时机 III1.题目链接2.算法原理详解3.代码实现 2.买卖股票的最佳时机 IV1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机 III 1.题目链接 买卖股票的最佳时机 III 2.算法原理详解 注意:本题为了便于初始化,有较多细节服…

瑞萨RA8系列教程 | 基于e2s实现RA8串口输出配置

关注星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 串口是最常见的通信方式之一,也是单片机调试最常见的通信接口,也是现在的单片机必备的通信接口,目前(2024-05)最新、最强…

【香橙派AIpro】开箱测评

1.板子开箱 哟,看起来还不错哦!!! 收货清单: 主板*1 1.5m数据线*1 充电头*1 1.1.充电头 近65W的充电头,不错不错。 1.2.主板 1.2.1.上面 哇噢,还送了2.4/5G的WiFi和蓝牙天线。 emm&#xf…

卷出新高度,直呼太强!时隔三月,YOLO再度进化升级:《YOLOv10—实时端到端目标检测》重磅来袭

真的是不止一次感叹,学习的速度都跟不上发论文出新品的速度。。。。。 继前文YOLOv9发布以来也就不到三个月的时间,YOLOv10就来了! 《太卷了,目标检测新成员——YOLOv9: Learning What You Want to LearnUsing Programmable Gra…

吴恩达2022机器学习专项课程C2W2:2.22 多类 softmax softmax与神经网络 softmax的代码改良 多标签分类

目录 多分类问题1.什么是多分类问题2.多分类问题案例3.二分类与多分类的区别 Softmax1. 什么是Softmax2.逻辑回归预测的计算过程3. Softmax预测的计算过程4.Softmax 回归与逻辑回归的关系5. Softmax的损失函数 softmax与神经网络1.设置Softmax层2.Softmax层的计算3.softmax激活…

卸载/删除 Maxask.com,最简单的方法

被绑架的浏览器,太恶心了。 Maxask伪装成了插件,在你搜索网页的时候利用了重定向,导致出现的界面时Maxask的界面,很恶心。 只需要排查正在使用的,如下图有颜色的图表。 删除一个插件,浏览器搜索一下看看有…

mysql数据库安装指南

这里写自定义目录标题 官网下载mysql数据库安装MySQL数据库添加环境变量查看mysql的服务验证是否配置成功 注意:如果用MySQL8的版本安装不成功,可以尝试用MySQL5的版本。MySQL8的版本可能在windows上一直不能启动,经过查询是某个版本的漏洞。…

知识存储概述

文章目录 知识存储概述知识存储方式知识存储基础工具技术发展趋势 知识存储是针对知识图谱的知识表示形式设计底层存储方式,完成各类知识的存储,以支持对大规模图数据的有效管理和计算。知识存储的对象包括基本属性知识、关联知识、事件知识、时序知识和…

linux网卡MAC地址

1、ifconfig命令查看网卡MAC地址 1.1 通过HWaddr或ether字段过滤mac地址 ifconfig | grep HWaddr ifconfig | grep ether [rootlocalhost ~]# /sbin/ifconfig | grep ether 注:有些Linux发行版本的MAC地址字段为HWaddr,有些Linux发行版本的MAC地址字段…

智能未来,触手可及,畅享移动云

目录 一、简介 二、移动云强大优势 1. 强大的网络基础设施 2. 可靠服务 3. 丰富产品线 4. 技术应用 5. 优惠价格策略 三、多商对比 网络优势 四、移动云的未来发展 五、实战应用 5.1 服务器选购 ​编辑5.2 服务器启动 5.3 实例操作 六、移动云的服务优势 6.1 客…

postman教程-5-发送put请求

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了postman发送post请求的方法,本小节我们讲解一下postman发送put请求的方法。 HTTP PUT 请求是一种用于传输数据的网络协议方法,它在客户端和服务器之间的通信中扮演着重…

数据中心、HPC、AI等应用场景互联协议混战哪家强?

生成式人工智能快速发展对算力与存力呈指数需求增长,进一步加剧了算力与存力之间既有矛盾,时代在呼唤更大的运力(即计算与存储之间的数据传输)--AIGC时代需要更大带宽,更为快速的数据传输路径。 众所周知,P…

香橙派AIpro初体验,详解如何安装Home Assistant Supervised

香橙派AIpro(OrangePi AIpro)开发版,定位是一块AI开发板,搭载的是华为昇腾310(Ascend310)处理器。 没想到,这几年的发展,AI开发板也逐渐铺开,记得之前看到华为发布昇腾3…

javascript 防抖 节流

在前端开发中,性能优化是提升用户体验的关键环节。防抖(Debounce)和节流(Throttle)作为两种常见的优化技术,能够有效管理和控制频繁触发的事件,减少不必要的计算和资源消耗。无论是在处理用户输…

基于香橙派 Ai Pro的ROS Qt人机交互软件部署指南

一,前言 最近收到了CSDN的邀请,对香橙派新出的Ai Pro进行测评: 说来也巧,其实香橙派本人对其映像挺深刻的,在2017年左右,本人刚上大学,当时是在淘宝购买树莓派,发现有个叫香橙派的国产板子,性能跟树莓派差不多吧,但是…

数据仓库和数据挖掘基础

文章目录 1. 数据仓库基础知识1.1 数据仓库的基本特性1.2 数据仓库的数据模式1.3 数据仓库的体系结构 2. 数据挖掘基础知识2.1 数据挖掘的分类2.2 数据挖掘技术2.3 数据挖掘的应用过程 传统数据库在联机事务处理(OLTP)中获得了较大的成功,但是对管理人员的决策分析要…

告别低效率||智能BI财务分析软件

在当今信息爆炸的时代,财务数据作为企业运营的核心,其处理和分析的效率直接关系到企业的决策速度和市场竞争力。奥威BI软件凭借其卓越的性能和智能化的分析功能,为企业提供了一套高效、准确的财务分析解决方案。 奥威BI软件在财务分析中的优…