三、进程通信

news2025/1/18 20:25:18

一、基础知识

  1. 数据传输

一个进程将他的数据发送给另一个进程

  1. 资源共享

多个进程间共享同样的资源

  1. 通知时间

一个进程向另一个进程发送消息,通知他们发生了某种事情

通信方式:

  1. 管道和有名管道

  1. 信号signal

  1. 消息队列

  1. 共享内存

  1. 信号量

  1. 套接字

二、管道:

无名管道

无名管道是最古老的进程通信方式,有如下两个特点: 1. 只能用于有关联的进程间数据交互,如父子进程,兄弟进程,子孙进程,在目录中看不到文件节 点,读写文件描述符存在一个 int 型数组中。 2. 只能单向传输数据,即管道创建好后,一个进程只能进行读操作,另一个进程只能进行写操作, 读出来字节顺序和写入的顺序一样。

int pipe(int pipefd[2]
)

一个 int 型数组,表示管道的文件描述符,pipefd[0]为读,pipefd[1]为写,如下图 所示:

使用步骤:

1. 调用 pipe()创建无名管道; 2. fork()创建子进程,一个进程读,使用 read(),一个进程写,使用 write(

int fd[2];

pipe(fd);创建无名管道

有名管道

有名管道中可以很好地解决在无关进程间数据交换的要求,并且由于它们是存在于文件系统中的,这也提供了一种比匿名管道更持久稳定的通信办法。有名管道在一些专业书籍中叫做命名管道,它的特点是1.可以使无关联的进程通过 fifo 文件描述符进行数据传递;2.单向传输有一个写入端和一个读出端,操作方式和无名管道相同。

int mkfifo(const char *pathname, mode_t mode)

pathname:有名管道的路径和名称 mode:权限

有名管道使用步骤: 1. 使用 mkfifo()创建 fifo 文件描述符。 2. 打开管道文件描述符。 3. 通过读写文件描述符进行单向数据传输

mkfifo(read.c,0666)

三、信号

信号发送

信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:

1、当用户按某些按键时,产生信号;

2、硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号;

3、进程用kill函数将信号发送给另一个进程;

4、用户可用kill命令将信号发送给其他进程。

kill -l查看所有信号

发送信号主要函数:kill和raise

int kill(pid_t pid, int sig)

pid:

大于 0,时为向 PID 为 pid 的进程发送信号 等于 0,向同一个进程组的进程发送信号; 等于-1,除发送进程自身外,向所有进程 ID 大于 1 的进程发送信号。 小于-1,向组 ID 等于该 pid 绝对值的进程组内所有进程发送信号。

sig:

设置发送的信号;等于 0 时为空信号,无信号发送。常用来进行错误检 查

int raise(int sig)

sig:信号

相当于 kill(getpid(),sig),向进程自身发送信号

unsigned int alarm(unsigned int seconds)

设定的时间

设定的时间超过后产生 SIGALARM 信号,默认动作是终止进程

每个进程只能有一个 alarm()函数,时间到后要想再次使用要重新注册。

kill可以给任意进程发

raise只能给自己发

信号接收:

接收信号:如果要让我们接收信号的进程可以接收到信号,那么这个进程就不能停止。让进程不停止 有三种方法:  while  sleep  pause

int pause(void)

将进程挂起,等待信号

信号处理:

信号是由操作系统来处理的,说明信号的处理在内核态。信号不一定会立即被处理,此时会储存在信 号的信号表中。

信号有三种处理方式: 1.默认方式(通常是终止进程), 2.忽略,不进行任何操作。 3.捕捉并处理调用信号处理器(回调函数形式)

sighandler_t signal(int signum, sighandler_t handler);
可以简化成 signal(参数 1,参数 2)

参数1:我们要处理的信号,kill -l查看

参数2:

处理的方式(是系统默认还是忽略还是捕获) 忽略该信号,填写“SIG_IGN”; 采用系统默认方式处理该信号,填写“SIG_DFL”; 捕获到信号后执行此函数内容, 定义格式为“typedef void (*sighandler_t)(int)”,sighandler_t 代表一个函数指针。

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

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

相关文章

c++11 标准模板(STL)(std::multiset)(六)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

基于python Django 餐馆点菜管理系统

问题描述&#xff1a; 随着网络的迅速发展&#xff0c;越来越多的人开始接受甚至时依赖了网络营业的这种交易形式&#xff0c;传统的点菜模式不仅浪费时间&#xff0c;效率低下&#xff0c;而且特别耗费成本与人力&#xff0c;因此不少商家开始使用网上点菜系统。网上点菜系统是…

皮尔森相关系数(Pearson correlation coefficient)

最近在看脑机接口的网络&#xff0c;看到有使用通道的皮尔森相关系数作为特征的方法&#xff0c;这里记录一下皮尔森相关系数的学习内容&#xff0c;方便以后查阅。 皮尔森相关系数(Pearson correlation coefficient&#xff09;相关系数简单相关系数复相关系数典型相关系数参考…

【MySQL】MySQL中的数学函数有哪些?

数学函数MySQL函数简介数学函数1.绝对值函数ABS&#xff08;x&#xff09;和返回圆周率的函数PI&#xff08;&#xff09;2.平方根函数SQRT&#xff08;x&#xff09;和求余函数MOD&#xff08;x&#xff0c;y&#xff09;3.获取整数的函数CEIL&#xff08;x&#xff09;、CEIL…

关于Json Web Token(token)在前后端的实践思考

1、前言 啥也不说了&#xff0c;直接进入正题&#xff0c;来学习一下Token在前端和后端的简单应用分析 Token是在客户端频繁向服务端请求数据&#xff0c;服务端频繁的去数据库查询用户名和密码进行对比&#xff0c;判断用户名和密码是否正确&#xff0c;并作出相应提示&…

华为机试题:HJ37 统计每个月兔子的总数(python)

文章目录博主精品专栏导航知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input()与list(input())的区别、及其相互转换方法2、print() &#xff1a;打印输出。3、整型int() &#xff1a;将字符串或数字转换为整…

C语言基础(二)—— 常量与变量、数据类型、进位制、关键字、原码反码补码、限定符、字符串格式化输入输出

1. 常量与变量1.1 关键字1.2 数据类型数据类型的作用&#xff1a;编译器预算对象&#xff08;变量&#xff09;分配的内存空间大小。1.3 常量在程序运行过程中&#xff0c;其值不能被改变的量常量一般出现在表达式或赋值语句中整型常量100&#xff0c;200&#xff0c;-100&…

MySQL事务篇

目录​​​​​​​ 一.事务有哪些特性&#xff1f; 二.并行事务会引发什么问题&#xff1f; 脏读 不可重复读 幻读 三.事务的隔离级别有哪些&#xff1f; 一.事务有哪些特性&#xff1f; 原子性&#xff08;Atomicity&#xff09;&#xff1a;一个事务中的所有操作&…

4.数据库安全性

学习过程参考&#xff08;后续章节同&#xff09; 【公开课】数据库系统概论&#xff08;王珊老师&#xff09;&#xff08;完结&#xff09; 《数据库系统概论》思维导图 【专栏必读】数据库系统概论第五版&#xff08;王珊&#xff09;专栏学习笔记目录导航及课后习题答案详…

2023年02月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年02月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

MySQL的函数

目录 一.分类 聚合函数 概述 格式 操作 数学函数 操作1 操作2 操作3 字符串函数 操作1 操作2 操作3 操作4 日期函数 操作1 操作2 操作3 控制流函数 if逻辑判断语句 case when 语句 窗口函数 介绍 分类 序号函数 开窗聚合函数- SUM,AVG,MIN,MAX 分布函数-…

Java 对象拷贝与转换-org.mapstruct:mapstruct 包(@Mapper、@Mapping)的使用

MapStruct的使用 最近在学习技术时候&#xff0c;发现一个特别好用的包&#xff0c;org.mapstruct:mapstruct&#xff0c;它是专门用来处理 domin 实体类与 model 类的属性映射的 它的优势&#xff1a; 很多项目大量映射的方式通过手动get、set&#xff0c;首先写法很low&…

并发编程 · 基础篇 · android线程那些事

小木箱成长营并发编程系列教程(排期中): 并发编程 基础篇(下) android线程池那些事 并发编程 提高篇(上) Java并发关键字那些事 并发编程 提高篇(下) Java锁安全性那些事 并发编程 高级篇(上) Java内存模型那些事 并发编程 高级篇(下) Java并发BATJ面试之谈 并发编程…

Jupyter notebook——在Anaconda中多个环境下,设置不同的默认打开路径

项目背景&#xff1a;anaconda中搭建了一个python3.6&#xff0c;一个python3.7版本&#xff0c;python3.6环境版本的jupyter notebook默认打开路径设置为&#xff1a;D:\DeepLearning\cv&#xff0c;修改jupyter notebook默认路径见&#xff1a;https://blog.csdn.net/qq_1881…

分享115个图片切换JS特效,总有一款适合您

分享115个图片切换JS特效&#xff0c;总有一款适合您 115个图片切换JS特效下载链接&#xff1a;https://pan.baidu.com/s/1QX7b5LDlY6lBqMVjgBKSwA?pwdk05d 提取码&#xff1a;k05d Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery多图…

Appium+Python+pytest自动化测试框架

先简单介绍一下目录&#xff0c;再贴一些代码&#xff0c;代码里有注释Basic目录下写的是一些公共的方法&#xff0c;Data目录下写的是测试数据&#xff0c;image存的是测试失败截图&#xff0c;Log日志文件&#xff0c;Page测试的定位元素&#xff0c;report测试报告&#xff…

Linux从入门到精通

Linux从入门到精通 1. Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX&#xff08;可移植操作系统接…

Nacos 注册监听器

文章目录前言项目文件说明pom依赖bootstrap.ymlNacosConfig 配置类监听器实现类-默认实现监听器实现类-json配置处理注册监听器监听器的效果前言 本文主要讨论Nacos作为配置中心时&#xff0c;其中配置内容发生更改时&#xff0c;我们的应用程序能够做的事。 一般使用监听器来…

DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

目录 Mobilenetv2的改进 浅层特征和深层特征的融合 完整代码 参考资料 Mobilenetv2的改进 在DeeplabV3当中&#xff0c;一般不会5次下采样&#xff0c;可选的有3次下采样和4次下采样。因为要进行五次下采样的话会损失较多的信息。 在这里mobilenetv2会从之前写好的模块中…

第四天链表

24. 两两交换链表中的节点力扣题目链接(opens new window)给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。接下来就是交换相邻两个元素了&#xff0c;此时一定要画…