首页 > 系统相关 >进程间通信是什么?Linux进程间通信有几种方式?

进程间通信是什么?Linux进程间通信有几种方式?

时间:2024-01-30 14:01:46浏览次数:31  
标签:IPC 通信 间通信 管道 Linux 进程 共享内存

  Linux进程间通信有几种方式?所谓进程间通信,就是在不同进程之间传播或交换信息,Linux支持多种进程间通信机制,常见的方式如下:

  进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。

  1、无名管道通信

  无名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系通常是指父子进程关系。

  2、高级管道通信

  高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们称为高级管道方式。

  3、有名管道通信

  有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

  4、消息队列通信

  消息队列(message queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  5、信号量通信

  信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

  6、信号

  信号(sinal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

  7、共享内存通信

  共享内存(shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

  8、套接字通信

  套接字(socket):套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

标签:IPC,通信,间通信,管道,Linux,进程,共享内存
From: https://blog.51cto.com/u_14661964/9483865

相关文章

  • BCLinux
    1、BCLinux卸载license模块rpm-qa|greplicenserpm-e--nodepsbclinux-license-manager-4.0-1.oe1.bclinux.x86_64--noscriptsyumcleanall&&yummakecache2、修改密码策略vim/etc/pam.d/system-authpasswordrequisitepam_pwquality.sotry_first_pas......
  • Linux环境变量配置文件
    1.什么是环境变量配置文件环境变量-配置文件环境变量是可以在父shell和子shell都生效的变量,Linux允许把本地变量声明为环境变量,但是不会永久生效,一旦重启,就会失效想要永久生效,需要把这个更改放进环境变量配置文件环境变量配置文件中主要是定义对系统的操作环境生效......
  • 更改linux默认启动内核版本,修改 GRUB 设置
    简介:在本文中,我们将讨论如何在GRUB引导加载器中更改默认启动的Linux内核版本。这对于在多个内核版本间切换非常有用。已在Ubuntu上验证可用。告别直接修改/boot/grub/grub.cfg的土办法。查看目前linux上面的内核版本#方法一ls/boot/vmlinuz-*#方法二:cat/boot/grub/......
  • Linux挂载新磁盘到根目录
    Linux挂载新磁盘到根目录添加磁盘到需要挂载的机器上lsblk查看硬盘挂载情况,sdb,sdc为我新挂载的磁盘fdisk-l查看挂载之前的分区情况,为新硬盘创建分区fdisk/dev/sdb,终端会提示:Command(mforhelp):输入:n依次输入p和1接着便会提示卷的起始地址和结束地址,都保持......
  • windows配置linux开发环境
    VSCode中安装插件:Remote-WSL扩展、RemoteDevelopment扩展安装检查:在左下角有一个远程状态的标记这个标记可以看出vscode在远程还是本地工作。点击后可选择需要的操作。......
  • linux利用shell+crontab自动备份mysql数据库
    一.准备条件,得先安装一个mysql数据库mysql5.7数据库安装教程https://www.cnblogs.com/magepi/p/16983507.html 二.然后准备编写shell脚本编写备份单个库shell脚本#!/bin/bash#保存备份个数,备份3天数据number=3#备份保存路径backup_dir=/opt/mysqlbackup#日期dd=......
  • django打包(linux)
    1.新建uvicorn文件(1)安装uvicorn插件pipinstalluvicorn(2)新建main.py文件fromuvicorn.serverimportConfig,Serverfromserver.asgiimportapplicationconfig=Config(app=application,host="0.0.0.0",port=8000,loop="asyncio",log_level=&q......
  • UTF-8格式编码的文件分为带BOM和不带BOM windows下编程,Linux下编程建议使用“UTF-8无
    UTF-8格式编码的文件分为带BOM和不带BOMwindows下编程,Linux下编程建议使用“UTF-8无BOM格式,“建议使用”UTF-8带BOM格式“Notepad++支持“UTF-8无BOM格式”和“UTF-8带BOM格式”两种UTF-8。一直以来不知道二者有什么区别。程序员它们的区别是:UTF-8带BOM格式,就是在文件头添加......
  • 清理linux命令记录
    Linux清理痕迹的一些方法1,暴力省事直接删除首先是比较暴力省事的操作,直接清除当前用户bash历史记录,可以直接echo空进去。echo"">~/.bash_history然后history的话,可以通过c参数直接删除。linux查看历史命令在Linux中,可以使用以下命令来查看历史命令:使用history命......
  • linux内核-2.Linux 内核makefile编译过程
    1zImage编译_all是默认目标,如果使用命令make或者makeall编译Linux的话此目标就会被匹配。KBUILD_EXTMOD为空的,因此194行的代码成立,因此_all依赖all。all又依赖vmlinux,开始编译vmlinux。makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distcleanmakeARCH=armCR......