首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程通信

1.1 无名管道 1.1.1 概念和相关知识 无名管道只能用于具有亲缘关系进程之间通信,通常一个管道由一个进程创建,然后实现两个进程通信时必须通过fork创建子进程,实现父子进程之间通信。...在Linux系统中专门设置了一种特殊系统文件-管道文件——FIFO文件形式存在于文件系统,这样,即使与FIFO创建进程不存在亲缘关系进程,只要可以访问该路径,就可以通过FIFO进行彼此间通信...6 套接字(socket) 套接字是一种进程通信机制,可用于不同机器间进程通信。...:AF_UNIX:只用于单一Unix系统进程通信、AF_INET:用于Internet通信;type:采用通讯协议:SOCK_STREAM:用TCP协议、SOCK_DGRAM:用UDP协议;protocol...在Linux系统,1024以下端口只有拥有root权限程序才能绑定。

1.9K20

Linux进程通信

进程通信有管道、信号、消息队列、信号量、共享内存、套接字等。 一、管道通信 管道通信方式分为无名管道和有名管道,无名通道可用于有亲缘关系进程通信,有名通道克服了管道没有名字限制。...2.只能由于父子进程或者兄弟进程之间 3.单独过程一种独立文件系统 4.数据读出和写入:一个进程向管道内容被管道另一端进程读出。...三、消息队列 消息队列(message queue) 消息队列是由消息链表,存放在内核并有消息队列标识符标识。克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。...四、信号 信号是一种比较复杂通信方式,用来通知接收进程某个事件已经发生。...是最快IPC(进程通信)方式,是针对其他进程通信方式运行效率低而专门设计,往往与信号量配合使用,实现进程同步和通信

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux进程进程通信_linux共享内存进程通信

    内存共享最新整理: Linux进程通信-共享内存 – 码到城攻共享内存可以说是最有用进程通信方式,也是最快IPC形式 https://www.codecomeon.com/posts...实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新通信时,再重新建 立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内 存,并没有写回文件。...共享内存内容往往是在解除映射时才写回 文件。因此,采用共享内存通信方式效率是非常高。...二、相关函数: 与信号量一样,在Linux也提供了一组函数接口用于使用共享内存,而且使用共享共存接口还与信号量非常相似,而且比使用信号量接口来得简单。...2、shmat函数 第一次创建完共享内存时,它还不能被任何进程访问,shmat函数作用就是用来启动对该共享内存访问,并把共享内存连接到当前进程地址空间。

    4.5K30

    Linux进程通信——管道

    管道 进程通信概念 管道 匿名管道 创建匿名管道过程 管道读写特性 管道本身特征 基于管道进程池设计 命名管道 让两个无血缘关系进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性...管道本身特征 1.管道生命周期是进程生命周期 2.管道可以用来进行具有血缘关系进程之间进行通信,常用于父子通信。...这里要注意,不能总让一个子进程工作,要分工做。...创建第二个子进程时候,第二个子进程也继承了父进程文件描述符表,同样是关闭对应读写端,但是父进程文件描述符表还存着对于第一个子进程写端,这就是一个隐藏bug。...命名管道 这个管道可用于两个没有血缘关系进程进行通信。 第一个参数是文件路径+文件名,第二个参数是权限(和创建文件权限是一个东西)。 成功返回0,失败返回-1.

    4K70

    Linux进程通信之管道通信

    父子进程管道通信 Linux进程通信几种方式 管道通信 中断信号 共享内存、消息队列 Unix Socket 我们PHP中所使用workman、swoole 或者其他语言当中进行通信也是无非以上几种方式...当通过运行代码时,我们可以发现,当父进程写入数据后,子进程也会读到父进程写入数据,但以上管道通信是以阻塞方式运行,当没有数据时,进程则会阻塞不执行 非阻塞方式 $file = 'pipe_file...当加上函数stream_set_blocking以非阻塞方式运行后,会发现写进程并没有写进去,并且报了一个警告错误,这个就是因为非阻塞模式,不管有没有接受到数据,都执行完毕退出导致,下面我们再修改一下代码...通过执行结果发现,到循环了1400多次后,写进程写入数据了,读进程读到数据后并退出了 注意 当读进程还在读数据时候,写进程关闭,此时写进程则会无法写入数据,并且会发送一个中断信号SIGPIPE,此时需要自己进行处理...有想法同学可以自己尝试写一下,自己实现信号调度并打印信号处理

    1.9K30

    Linux 进程通信

    系统每一个进程都有各自地址空间,并且相互独立、隔离,每个进程都处于自己地址空间中,因此相互通信比较难,Linux 内核提供了多种进程通信机制。...2、信号 信号用于通知接收信号进程有某种事件发生,所以可用于进程通信;除了用于进程通信之外,进程还可以发送信号给进程本身。...4、信号量 信号量是一个计数器,与其它进程通信方式不大相同,它主要用于控制多个进程间或一个进程多个线程间对共享资源访问,相当于内存标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志...,除了用于共享资源访问控制外,还可用于进程同步。...Linux 提供了一组精心设计信号量接口来对信号量进行操作,它们声明在头文件 sys/sem.h

    3.2K20

    Linux进程通信——信号

    ,信号出现使得进程直接通信不在是被动,不在向之前那样,read()操作往往需要等待write()操作结束。...因为信号是对中断一种模拟。既然是中断,那么它发生就是不确定。就不会发生一个进程阻塞在这里等待另一个进程执行结果。这样异步性通信机制无疑是更加强大。...Linux通信机制是遵从POSIX标准。34号信号SIGRTMIN信号之前是早期UNIX操作系统。它们是不可靠信号。...(SIGKILL和SIGSTOP这两个不能忽略) 捕捉信号:定义信号处理函数,当信号发出时候,执行相应操作。...还需要一个用于捕捉信号函数。在Linux下pause()函数用于捕捉信号,如果没有信号发生,pause函数将会一直等待。直到有信号发生。

    2.4K30

    进程7种通信方式_linux 进程通信

    进程通信: 每个进程各自有不同用户地址空间,任何一个进程全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走...详细可参考文章:进程通信方式——pipe(管道) 2 高级管道通信 ---- 高级管道(popen):将另一个程序当做一个新进程在当前程序进程启动,则它算是当前程序进程,这种方式我们成为高级管道方式...因此,主要作为进程间以及同一进程内不同线程之间同步手段。 6 信号 ---- 信号 ( sinal ) : 信号是一种比较复杂通信方式,用于通知接收进程某个事件已经发生。...8 套接字通信 ---- 套接字( socket ) : 套接口也是一种进程通信机制,与其他通信机制不同是,它可用于不同机器间进程通信。...socket编程实现客户机服务器通信例子 Linux进程间套接字(Socket)通信 基于InternetLinux客户机/服务器系统通讯设计与实现 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

    2.7K20

    Linux进程通信 管道

    --《Unix环境高级编程》 通俗理解: Linux管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...若两个进程需要利用PIPE通信,就要保证一个进程使用fd[0],另一个进程使用fd[1]。...在父子进程共享区,初始化pipe_fd后,即规定pipe_fd[0]为读取端,pipe_fd[1]为写入端。故pipe_fd必须在进程共享区初始化,也就能理解pipe存在开篇第二个局限性原因了。...PIPE可称为“匿名管道”,无需命名,在具有亲属关系进程中使用;FIFO又可称为“有名管道”,在使用过程,其会在系统创建FIFO类型文件,从而可通过此文件进行不相关进程通信通信方式。...PIPE为半双工通信,即在一次通讯,数据只能在一个方向上流动。FIFO为全双工通信,在一次通讯,两端可以同时收发数据。

    3.1K10

    Linux进程通信

    我们在Linux信号基础已经说明,信号可以看作一种粗糙进程通信(IPC, interprocess communication)方式,用以向进程封闭内存空间传递信息。...在Linux文本流,我们提到可以使用管道将一个进程输出和另一个进程输入连接起来,从而利用文件操作API来管理进程通信。...由于基于fork机制,所以管道只能用于进程和子进程之间,或者拥有相同祖先两个子进程之间 (有亲缘关系进程之间)。为了解决这一问题,Linux提供了FIFO方式连接进程。...在几个进程共享键值情况下,这些传统IPC非常类似于多线程共享资源方式(参看Linux多线程与同步): semaphore与mutex类似,用于处理同步问题。...一个小小注解是,socket也可以用于计算机内部进程通信。 总结 PIPE, FIFO semaphore, message queue, shared memory; key

    3.8K101

    Linux 进程通信:管道

    微博ID:orroz 微信公众号:Linux系统技术 前言 管道是UNIX环境历史最悠久进程通信方式。本文主要说明在Linux环境上如何使用管道。...目前在任何一个shell,都可以使用“|”连接两个命令,shell会将前后两个进程输入输出用一个管道相连,以便达到进程通信目的: [zorro@zorro-pc pipe]$ ls -l /etc...用一个图来说明这个程序状态就是这样: image.png 一个进程自己给自己发送消息这当然不叫进程通信,所以实际情况我们不会在单个进程中使用管道。...管道推荐使用方法是其单工模式:即只有两个进程通信,一个进程只写管道,另一个进程只读管道。...另外,作为一个程序员,即使我们了解了Linux管道实现,我们代码也不能依赖其特性,所以处理管道时该越界判断还是要判断,该错误检查还是要检查,这样代码才能更健壮。

    8.3K21

    UNIX(进程通信):01---Linux进程通信方式

    Linux进程通信手段基本上是从Unix平台上进程通信手段继承而来。...现有大部分Unix和流行版本都是遵循POSIX标准,而Linux从一开始就遵循POSIX标准;2)BSD并不是没有涉足单机内进程通信(socket本身就可以用于单机内进程通信)。...图一给出了linux 所支持各种IPC手段,在本文接下来讨论,为了避免概念上混淆,在尽可能少提及Unix各个版本情况下,所有问题讨论最终都会归结到Linux环境下进程通信上来。...linux进程通信几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程通信,有名管道克服了管道没有名字限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程通信...; 信号(Signal):信号是比较复杂通信方式,用于通知接受进程有某种事件发生,除了用于进程通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合

    2.6K30

    Linux进程通信之匿名管道通信

    一、进程间进行通信目的 我们往往需要多个进程协同,共同完成一些事情。 数据传输:一个进程需要将它数据发送给另一个进程 资源共享:多个进程之间共享同样资源。...操作系统提供资源不同,就决定了有不同通信方式。 二、管道通信 2.1、匿名管道通信原理 基于文件方式,让不同进程看到同一份资源通信方式,叫做管道,管道通信只能为单向通信。...也就是说,struct file对象是允许多个进程通过指针指向它。 前面也说过,管道通信为单向通信,所以如果想让父进程写子进程读,就关闭父进程读端关闭子进程写端,反之亦然。...2.2、pipe系统调用函数  pipe可以帮我们创建一个不需要向磁盘刷新且磁盘并不存在文件,也就是管道。这是一个内存级文件,是匿名文件或叫匿名管道。...匿名管道只能让具有血缘关系进程进行进程通信,常用于父子进程之间进行进程通信

    15110

    Linux进程通信之管道通信2

    随机进程管道通信(无血缘关系) 读进程 <?...(STDOUT,"pid=%d write len = %d \n",getmypid(),$len); } } fclose($fd); 验证 通过以上图片可以发现,我们实现了不同进程通信...,这样就可以方便一些同学在使用workman 、swoole 配合其他 fpm框架使用时候,、拿到跨进程数据,从而实现自己业务逻辑 注意 找到管道文件,使用cat pipe_file也相当于读取管道内容...当一个读进程 多个写进程时,读进程是可以正常工作获取管道内容 当一个写进程,多个读进程时,读进程会依次从管道哪去数据,也是可以正常工作(类似于消息队列) 切记,读进程一定要设置非阻塞方式运行...进程通信之管道通信 下一篇: 没有了

    1.7K30

    Linux进程通信--共享内存

    本地通信方案:system V IPC: 共享内存 消息队列 信号量 共享内存基本原理 每一个进程有自己地址空间,经过页表转化,找到物理内存,由于进程具有独立性,每个进程有自己代码和数据,内核数据结构独立...假设目前有两个进程进程A和进程B。 首先由操作系统在物理内存开辟一段内存空间,共享内存虽然是操作系统创建,但是这些进程某一个需要来创建这个共享内存,这个共享内存属于操作系统。...其次,将这个内存空间经过页表,映射到进程A共享区,在共享区申请一段空间,然后将起始虚拟地址返回给用户,进程就可以通过地址和页表直接向共享内存写内容。进程B也可以执行操作。...此时如果进程C、进程D、进程E、进程F等进程也需要通信,但是不使用进程进程B共享内存,因此共享内存在系统可以同时存在多份,让不同个数、不同进程进行通信。...补充指令集–ipc指令 查看进程共享内存指令:ipcs -m 删除创建共享内存:ipcrm -m shmid key和shmid区别 key属于用户形成,是内核使用一个字段,用户不能使用

    9710

    Linux系统-进程通信

    Linux进程通信 零、前言 一、进程通信介绍 二、管道 1、匿名管道 2、命名管道 三、system V 1、共享内存概念及原理 2、共享内存使用接口介绍 1、共享内存资源查看 2、共享内存创建和释放...3、共享内存链接与去连接 4、接口使用示例 3、共享内存与管道对比 4、消息队列/信号量 零、前言 本章主要讲解学习Linux本系统下进程通信 一、进程通信介绍 概念: 进程通信简称...1、匿名管道 概念: 匿名管道用于本地具有亲戚关系进程之间通信,常用与父子进程通信 pipe函数原型: #include int pipe(int fd[2]);...PCB文件结构体文件地址数组可以保存两份,一份指向文件读端口,一份指向文件写端口 管道通过系统接口创建管道文件资源,并构建文件与PCB映射关系,当fork创建子进程时父子进程就见到同一份文件资源...,进而可能导致write进程被终止退出 示图: 数据写入原子性 当要写入数据量不大于PIPE_BUF时,linux将保证写入原子性 当要写入数据量大于PIPE_BUF时,linux将不再保证写入原子性

    2.8K10

    Linux进程通信——共享内存

    共享内存 原理与概念 两个进程PCB创建虚拟地址空间然后映射到物理内存,每个进程因为是独立,所以在物理内存地址也不同。 那么共享内存是怎么做到呢?...b.进程通信这个申请一块共享内存是专门设计出来,用来IPC。 c.共享内存是一种通信方式,所有想通信进程都可以用。 d.OS一定可能会存在很多共享内存。...在两个进程如果传入到ftok两个参数相同,返回key也相同,其中一个进程通过shmget接口创建共享内存,另一个接口通过shmget接口接收共享内存位置,这样两个进程就能看到同一份资源了。...写完,通知读端读取 没通知时候让server等待 如果不通过信号量,可以用两个匿名管道进行操作,思路: 两个进程写和读之前遵守管道规则,没有不能读,满了不能写等等。...这就说明,他们属于system V标准进程通信

    5.7K30

    Linux进程通信详解

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 进程通信介绍 什么是进程通信?...匿名管道通信 通信原理 匿名管道通信本质也是使不同进程看到同一份资源,匿名管道用于具有血缘关系进程进行通信,一般用于父子进程。...管道通信特点 管道本质就是文件,所以管道生命周期随进程,因为fd文件描述符生命周期 随进程 管道通信是一种单向通信,如果要实现双向,则需要借助两个管道 匿名管道通信通常用来进行有血缘关系进程,常用于父子进程...如下所示  如果比较细心的话,我们会发现,该管道文件大小为0,事实上,进程通信中往管道写入数据,都是在内存完成,OS并不会把数据刷新到磁盘文件,因为这样做并没有意义,所以即使我们不断地往管道文件写入数据...命名管道与匿名管道区别 匿名管道由pipe函数创建并打开,适用于具有血缘关系进程,且该管道文件没有名称 命名管道由mkfifo函数创建,由open函数打开,可以自定义命名,并且可以实现任意进程之间通信

    38820

    Linux进程通信——管道

    答:进程具有独立性,每个进程都有自己PCB,所以进程间需要通信,并且通信成本一定不低(通信本质:OS需要直接或者间接给通信双方进程提供“内存空间”,并且要通信进程,必须看到一份公共资源)...而我们所说不同通信种类本质就是:上面所说资源,是OS哪一个模块提供。...,不在写入,父进程在读取(如果管道没有数据,读端在读,此时默认会直接阻塞当前正在读取进程) 2.读慢写快 拿着管道读端不读,写端一直在写:写端往管道里写,而管道是有大小,不断往写端写,会被写满...管道是固定大小缓冲区,当管道被写满,就不能再写了。...,管道释放 2.管道可以用来进行具有血缘关系进程通信(常用于父子通信) 3.管道是面向字节流 4.半双工—单向通信(特殊) 5.互斥与同步机制——对共享资源进行保护方案 ---- 2.3

    21040

    Linux进程通信——有名管道

    管道(pipe)是无名管道,他是进程资源一部分,随着进程结束而消失。并且它只能在拥有公共祖先进程进程通信。而有名管道(FIFO)出现则解决了这个问题。FIFO提供了一个路径名与它关联。...Linux下建立有名管道函数是mkfifo。...函数原型: int mkfifo(const char * pathname,mode_t mode); 函数功能:创建一个FIFO文件,用于进程之间通信。...或者说,这也体现了进程并发行,管子有了一端以后,还必须有另一端,这才能构成管道。 测试一下,FIFO用于两个无关进程直接通信。首先建立我们有两个进程,一个是test1,另一个是test2....通信过程,读进程退出后,写进程向命名管道内写数据时,写进程也会退出。

    3K30
    领券