Linux9-进程间通信-管道、信号

ops/2025/2/26 22:11:05/

一、进程通信

同一主机进程间通信:

1.1无名管道

当前系统默认64K大小(当管道满时,再写时按FIFO的方式存储,会发生写阻塞)

用于同一主机下,具有亲缘关系的进程间通信。

1.创建一个管道并打开 int pipe(int pipefd[2]);(pipefd[0],管道的读端,pipefd[1]管道的写端) 

2.读管道    read();

3.写管道    write();

4.关闭管道 close();

5.删除管道 remove();

1.2有名管道

用于同一主机下,具有任意关系的进程间通信。

1.创建一个管道文件

mkfifo fifo(名为fifo的管道文件)    int mkfifo(const char *pathname, mode_t mode); 

a,b两个进程都创建了一个管道文件,目的是运行任意进程。

2.打开管道文件  open(“./fifo”,)//文件名、读写执行权限

3.读写                 write/read()

4.关闭                 close()

5.删除管道文件  remove(“路径”);

读关闭只写:管道破裂为防止这种情况,读写端必须同时打开。


1.3信号

信号:进程间的异步通知机制(软中断)

信号类型:kill -l

kill(pid,SIGUSR1)

2.Ctrl+C  3.Ctrl+\ 9.强制结束11.段错误 13.管道破裂 14.为进程定时,到达时间进程结束 17.子进程结束发给父进程 18.让停止态继续执行 19,让运行态停止 20.让进程暂停转后台Ctrl+Z

10/12自定义信号   9/19管理员信号 (无法被捕获和忽略)


1.3.2.接受信号

1.3.2.1.发送信号:


int kill(pid_t pid, int sig);

功能:给指定进程发送信号参数:
pid:进程pid号

Sig:发送的信号编号

  1.3.2.2 使用注册信号  

        1.1注册信号处理函数signal

        1.2忽略:不处理

        1.3捕获 : 按照用户自定义方式处理。

        1.4缺省:按信号默认方式处理(若不注册)

sighandler_t signal(int signum, sighandler_t handler);
功能:信号的接收方,注册一个信号处理函数

参数:

signnum:几号信号

handler:typede void (* sighandler_t handler)(捕获方式处理,自定义)

                SIG_IGN忽略方式处理

                SIG_DFL默认方式处理(缺省)

返回值:

        成功:函数地址

        失败:SIG_ERR

4.alarm
unsiqned int alarm(unsiqned int seconds):

功能:间隔seconds秒后给调用进程发送一个SIGALRM信号

参数:
seconds:秒数

返回值:
成功返回上次设定剩余的时间
上次未设定则返回0

5.int pause(void)

功能:挂起当前进程(可中断睡眠状态)

可以通过发送信号的方式,唤醒pause挂起的进程,信号必须被捕获。


1.4共享队列

1.5消息队列

1.6信号灯

不同主机进程间通信:

1.7网络套接字


http://www.ppmy.cn/ops/161512.html

相关文章

使用docker配置PostgreSQL

配置docker阿里云镜像仓库 国内使用docker hub拉取镜像比较慢,所以首先配置个人的镜像仓库。 阿里云的个人镜像仓库是免费的,对个人来说足够用。 具体操作参考阿里云官方链接 。 关于个人镜像仓库的使用参考链接。 配置完个人镜像仓库后将公网配置到doc…

DPVS-5: 后端服务监控原理与测试

后端监控原理 被动监测 DPVS自带了被动监控,通过监控后端服务对外部请求的响应情况,判断服务器是否可用。 DPVS的被动监测,并不能获取后端服务器的详细情况,仅仅通过丢包/拒绝情况来发觉后端服务是否可用。 TCP session state…

基于 JavaWeb 的 SSM+Maven 微信小程序快递柜管理系统设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

结构型模式 - 组合模式 (Composite Pattern)

结构型模式 - 组合模式 (Composite Pattern) 组合模式是一种结构型设计模式,它允许你将对象组合成树形结构以表示 “部分 - 整体” 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 经典的例子就是树形结构,里面可以是文件和文件夹的组合,文件…

堆排序:高效的选择排序

大家好!今天我们来聊聊一种高效的选择排序算法——堆排序(Heap Sort)。堆排序是一种基于堆这种数据结构的排序算法,它是一种选择排序的优化版本,具有 O(n log n) 的时间复杂度。堆排序非常适合用来处理大规模数据集&am…

学习Flask:Day 1:基础搭建

学习目标&#xff1a;完成第一个Flask应用 # app.py from flask import Flask app Flask(__name__)app.route(/) def home():return <h1>Hello Flask!</h1>app.route(/api/greet/<name>) def greet(name):return {message: fHello {name}!}if __name__ __…

Spring Core面试题

Spring Core面试题 基础概念 Q1: Spring的核心特性有哪些&#xff1f; public class SpringCoreBasicDemo {// 1. IoC容器public class IoCExample {public void iocDemo() {// XML配置Configurationpublic class AppConfig {Beanpublic UserService userService() {return …

【LeetCode Hot100】搜索二维矩阵 II[特殊字符]二分查找 vs 线性搜索,Java实现,图解+代码

&#x1f4bb; [LeetCode Hot100] 搜索二维矩阵 II&#x1f525;二分查找 vs 线性搜索&#xff0c;Java实现&#xff0c;图解代码 ✏️本文对应题目链接&#xff1a;搜索二维矩阵 II &#x1f4cc; 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 targ…