进程间通信

1.理解层面

为什么要进程间通信?

• 数据传输:⼀个进程需要将它的数据发送给另⼀个进程

• 资源共享:多个进程之间共享同样的资源。

• 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进

程终止时要通知父进程)。

• 进程控制:有些进程希望完全控制另⼀个进程的执行(如Debug进程),此时控制进程希望能够

拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。

怎么通信?

进程间通信的本质:是先让不同的进程,先看同一份资源"内存"。(然后才有通信的的条件)

任何一个进程提供?---不是。需要由OS提供

OS提供---系统调用---OS的接口(设计统一的通信接口)

什么是通信?

进程问通信(IPC,Inter-Process Communication)是指运行在同一台计算机成不同计算机上的多个进程之间进行数据交换和通信的技术,由于每个进程都有自己的地址空间,它们无法直接访问彼此的数据,因此需要通过特定的机制来实现通信,IPC是操作系统和多进程编程中的一个重要概念,广泛应用于分布式系统、多任务操作系统以及各种应用程序之间。

标准

2.环境问题

Ubuntu20.04+C+++vscode

如果是轻量云服务器,云服务器实例,重装系统/更多->重新安装

vscode---编辑器---支持插件化的配置

vscode配置:

1.Remote - SSH

2.调试--GDB debug

3.fitten code

小电脑ssh root@自己ip地址

然后输入密码就成功连接了

我们先来简单建立三个文件

复制代码
code.cpp

root@iZ5waahoxw3q2bZ:~/linux-learning/linux/26-6-2# cat code.cpp
#include<iostream>

int main()
{
    return 0;
}

Makefile

root@iZ5waahoxw3q2bZ:~/linux-learning/linux/26-6-2# cat Makefile
code.exe:test.c
        gcc -o $@ $^
.PHONY:clean
clean:
        rm -f code.exe

test.c

root@iZ5waahoxw3q2bZ:~/linux-learning/linux/26-6-2# cat test.c
#include<stdio.h>

int main()
{
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    printf("hello world!\n");
    return 0;
}

root@iZ5waahoxw3q2bZ:~/linux-learning/linux/26-6-2# make
gcc -o code.exe test.c

root@iZ5waahoxw3q2bZ:~/linux-learning/linux/26-6-2# ./code.exe

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

3.具体通信方式的(原理+代码)

1.基于文件的,管道通信

2.System V -本机通信

匿名管道

1.背景

文件上

基于已有的技术,直接进行通信

什么是管道

• 管道是Unix中最古⽼的进程间通信的形式。

• 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个"管道

匿名管道,通常用来做父子通信!

父子进程文件描述表相同指向同一个文件管理,从而实现通信。

让父子看到同一个资源叫做管道

真的管道不需要刷新到磁盘上,和磁盘没关系

2.原理

内存级

图1.1

这个管道是被OS单独设计的---配上单独的系统调用

/* On all other architectures */

int pipe(int pipefd2);

不要文件路径,内存级的,没有文件名

匿名管道!!!

我们是怎么保证,两个进程,打开的是同一个管道文件呢?

子进程继承父进程的文件描述表

图1.2

浅拷贝是发生在struct file的

管道也是文件,属于文件系统!

感谢你的观看,期待我们下次再见!

相关推荐
程序员清风4 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
readhere4 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI6 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz6 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎6 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo6 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
数字新视界7 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
运维行者_8 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
小小de风呀8 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
2401_868534788 小时前
陈冲2026年上海纽约大学全英文毕业演讲
服务器·网络