进程间通信的方式(附代码分析)

article/2025/10/9 13:15:33

进程间通信的方式

1. 进程间通信的几种方式

  • 管道

    比如 ls | grep 1;也就是将 进程 ls 拿到的结果作为 grep 1 这个进程的输入。实现了进程间的通信。

  • 消息队列

    消息队列就是我们的内核给我们创建的一种消息队列。我们可以往其中发送消息,也可以从其中接收消息。

  • 共享内存

    每个进程在访问内存的时候,会有虚拟内存地址和物理内存地址的一个映射。一般来说,俩个进程的虚拟内存地址可以是一样的,但是它们映射的物理内存地址是不一样的。共享内存就是将俩个进程的内存地址也是一样的。这个时候,俩个进程就可以访问共同的物理内存,实现通信。

  • 套接字

    比如访问数据库的进程和数据库进程本身之间的通信。

  • 信号

    信号就是说一个进程在运行的时候可以向另外的一个进程发送信号。
    可以通过 kill -l 指令可以列举出所有的信号指令。kill 和信号有什么关系呢?linux 的信号大多数都是将一个进程杀死。

2. 进程间通过信号进行通信的几个例子

  • 比如说使用命令 tail -f 1.txt, 运行了这个命令以后,这个进程会一直存在。那么怎么终止呢? ctrl + c, 就可以终止这个进程。其实这时候就是shell 终端进程向 运行的这个进程发送了一个 信号,这个信号的值其实是 SIGINT。

  • 比如说使用命令 tail -f 1.txt, 运行了这个命令以后,这个进程会一直存在。那么怎么终止呢?还可以通过 kill + 进程号。其实这时候就是shell 终端进程向 运行的这个进程发送了一个 信号,这个信号的值其实是 Terminated。

  • 比如说使用命令 tail -f 1.txt, 运行了这个命令以后,这个进程会一直存在。那么怎么终止呢?还可以通过 kill -9 + 进程号。其实这时候就是shell 终端进程向 运行的这个进程发送了 9号 信号,这个信号的值其实是 Killed。

3. 通过程序捕获信号

通过在程序中捕获信号,比如说,我们运行了一个java程序,但是我们想做到 ctrl + c , 和 kill + 进程号
,都不能终止这个进程,那么我们就可以捕获相应的信号。

  • 程序如下:
package org.example;import sun.misc.Signal;
import sun.misc.SignalHandler;public class Main {public static void main(String[] args) throws InterruptedException {// 注册信号的处理。捕获 SIGINT 信号的处理。Signal.handle(new Signal("INT"), new SignalHandler() {@Overridepublic void handle(Signal signal) {System.out.println(signal.toString() + "catched");}});// 循环打印123while (true) {Thread.sleep(1000);System.out.println(123);}}
}
  • 通过 javac 命令编译这个程序
    请添加图片描述

  • 通过 java 命令运行这个程序 可以看到控制台打印了如下内容,并且通过ctrl + c不能终止这个进程
    请添加图片描述

  • 通过 kill + 进程号 终止这个进程。注意: Killed 这个信号是无法被捕获的,执行了 kill -9 ,那么这个进程必须被强制杀死。
    请添加图片描述


http://chatgpt.dhexx.cn/article/caIyCGXo.shtml

相关文章

linux进程--进程间通信方式(一)

一、多进程 首先,先来讲一下fork之后,发生了什么事情。 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程…

进程间通信的方式——信号、管道、消息队列、共享内存

进程间通信的方式——信号、管道、消息队列、共享内存 多进程: 首先,先来讲一下fork之后,发生了什么事情。 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别…

Android 进程间通信的几种实现方式

一、概述 由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和S…

进程间通信的方式及原理

# 进程间通信的方式 文章目录 # 进程间通信的方式消息队列使用步骤 管道 消息队列 信号 信号量 socket 消息队列 首先消息队列就是内核维护的一块链表区域,只要是有足够权限的进程都可以向队列中添加消息,只要是有读权限的进程都可以在里面拿出消息 克…

C | 进程间通信的方式

C | 进程间通信的方式 1.无名管道 无名管道是实现亲缘间进程通信的一种方式,属于半双工通信。 无名管道的实现是队列,不能使用lseek对读写指针偏移。 无名管道有两个端:数据流入端和数据流出端,也叫写端和读端。它们是两个固定…

面试题:进程间通信的方式

liunx六大进程间通信方式 管道,消息队列,共享内存,信号量,socket,信号,文件锁 1,管道 1,匿名管道: 概念:在内核中申请一块固定大小的缓冲区&…

进程间通信的几种方式浅谈(上)

程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(interprocess communication)。第二种技术是同步,…

进程间通信的几种方式

一、管道 在Linux 中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现如下所述。 • 限制管道的大小。实际上&#x…

【进程间通信】进程间通信方式汇总

个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、管道模型1.1 匿名管道1.2 命名管道 2、消息队列2.1 创建消息队列2.2 发送消息2.3 接收消息 3、共…

android中进程间通信的几种方式

进程间通信(IPC)方式 使用Bundle使用文件共享使用Messenger使用AIDL使用COntentProvider使用Socket 一、使用Bundle 我们都知道Android中三大组件Activity,Service,Receiver都支持在Intent中传递Bundle数据,而Bundle…

操作系统——进程间通信

文章目录 其他文章管道消息队列共享内存信号量信号Socket总结 个人博客网站: https://xingkongdiyiren.github.io/myblog/,完整的Java知识体系,包括408,架构,业务,产品,软技能等 其他文章 操作系统——概…

进程间的通信方式(六种)

进程之间的通信 参考文章:https://blog.csdn.net/qq_34827674/article/details/107678226 前提知识:每个进程都有自己的用户空间,而内核空间是每个进程共享的。因此进程之间想要进行通信,就需要通过内核来实现。 管道&#xff1…

【操作系统】进程间通信的五种方式

引言1.进程对白:管道、记名管道、套接字1.管道2.虫洞:套接字3.信号 4.信号旗语:信号量5.进程拥抱:共享内存 引言 进程作为人类的发明,自然免不了脱离人类的习性,也有通信需求。如果进程之间不进行任何通信…

进程之间的通信方式

进程之间的通信方式包括管道,消息队列,共享内存,信号,信号量,socket六种方式,下面来对这6种方式分别进行介绍。 一、管道 管道的结构示意图如上所示,管道包含一个输入端和一个输出端&#xff0…

进程间通信的六种常见方式

目录 进程间通信(IPC): 一、管道 二、FIFO 三、消息队列 四、共享内存 五、信号 六、信号量 七、进程间通信方式总结: 进程间通信(IPC): 进程间通信的方式有很多,这里主要…

idea数据库管理工具配置连接数据库

idea数据库管理工具配置连接数据库 —————————————————————————————————————————————————————— 在cmd中操作数据库太麻烦了,还好idea为我们提供了很方便的数据库管理工具,下面看看如何用idea连接…

idea连接数据库失败解决办法

一.IDEA连接Mysql报错: 未找到驱动程序类 ‘com.mysql.cj.jdbc.Driver‘.  Change driver class 报错详细内容:未找到驱动程序类 ‘com.mysql.cj.jdbc.Driver’. Change driver class 报错原因:Mysql版本为5.0,找不到com.mysql.…

IDEA中如何连接数据库并显示数据库信息。

我的相关博客: java代码程序中连接mysql数据库的方法及代码 mysql数据库并发上锁问题,java代码 关于IDEA中怎么连接mysql数据库 相信部分朋友在使用IDEA操作数据库的时候会出现有关数据库信息的报错。 显示没有此表,或者无数据库等错误信息…

idea连接数据库失败原因及解决方案

这是因为安装mysql的时候时区设置的不正确 mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用8:00格式。使用的数据库是MySQL,在你没有指定MySQL驱动版本的情况下它自动依赖的驱动是8.0.12很高的版本,这是由于数据库和…

IDEA如何连接数据库 / IDEA连接数据库 新手,图解

如果在下面操作中遇到了问题,可以查看我的这篇笔记 https://blog.csdn.net/qq_44627608/article/details/115442815 1. 打开IDEA的数据库设置 2. 新建数据库链接 左上角的便是你链接的数据库了,第一次打开时左上角应该是空的,需要你从下面的…