首页 > 系统相关 >无名管道间父进程与子进程间的通信(含管道基本概念与特点)

无名管道间父进程与子进程间的通信(含管道基本概念与特点)

时间:2024-07-09 19:56:45浏览次数:13  
标签:间父 pid 管道 fd close 进程 execlp

管道

1.管道概念

2.本质

  • 内核缓冲区
  • 伪文件-不会占用磁盘空间

3.特点

两部分:

  • 读端,写端,对应两个文件描述符
  • 数据写端流入,读端流出
  • 操作管理的进程被摧毁后,管道自动被释放
  • 管道默认是阻塞的

4.管道的原理

  • 内部实现方式:队列
  • 环形队列:先进先出

缓冲区大小

  • 默认为4k
  • 大小会根据实际情况做出调整

5.管道的局限性

  • 队列:数据只能读一次,不能重复读取
  • 半双工通信

6.创建无名管道

7.父子进程通信实现ps aux

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
  int ret;
  int fd[2];

  ret = pipe(fd);//创建无名通道
  if(ret == -1)
  {
    printf("create pipe failed !\n");
    exit(1);
  }

  pid_t pid = fork();//创建父子进程
  if(pid == -1)//创建进程失败
  {
    printf("fork failed!\n");
    exit(1);
  }

  //ps aux
  if(pid>0) //父进程
  {
     close(fd[0]); //关闭读功能
     dup2(fd[1],STDOUT_FILENO);//由于execlp为执行括号中的程序,会打印在终端,因此我们需要dup2函数来进行重新定向
     execlp("ps","ps","aux",NULL);
     perror("execlp");
     exit(1);
  }
  //grep "bush"
  else if(pid == 0) //子进程
  {
    close(fd[1]);//关闭写的功能
    dup2(fd[0],STDIN_FILENO);//同上
    execlp("grep","grep","--color=auto","bush",NULL);
  }
  printf("pipe[0] is %d\n",fd[0]);
  printf("pipe[1] is %d\n",fd[1]);

  close(fd[0]);
  close(fd[1]);
  return 0;
}

结果如下:二者结果相同

标签:间父,pid,管道,fd,close,进程,execlp
From: https://blog.csdn.net/m0_57257049/article/details/140298321

相关文章

  • 有名管道:实现无亲缘关系进程间的通信
    有名管道的基本概念:具体操作例程:vimkfifo.c  编辑下列代码:#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>intmain(){intret;intfd;intnread;charreadbuff[50]={0};ret=......
  • linux进程管理
    Linux进程管理什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件什么是进程:狭义定义:进程就是一段程序的执行过程。 广义定义:进程是......
  • Superviso可视化监控进程
    如果您需要同时运行多个ThinkPHP命令,可以在Supervisor中为每个命令创建一个单独的程序段。以下是示例配置,其中包含两个ThinkPHP命令:command1.php和command2.php。在/etc/supervisor/conf.d/目录下创建一个名为thinkphp_commands.conf的配置文件,并编辑该文件,添加以下......
  • Python多线程与多进程编程:提升程序性能的实用技巧
    前言大家好!今天我们要深入探讨Python中的多线程与多进程编程,这可是提升程序并发性能的关键技能之一。记得我在处理大量数据时,通过多线程和多进程技术,大大提高了程序的执行效率。为了让大家也能掌握这些实用技巧,我将通过多个具体案例,详细讲解如何在Python中实现多线程和多......
  • 嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
    嵌入式C语言面试相关知识——CPU、进程和线程相关一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(ContextSwitch)?3、在嵌入式中如何优化CPU使用?三、自问题目——进程相关1、什么是进程?2、嵌入式系统中进程和线程的区别是什么?3、在嵌......
  • 在计算机取证中,Volatility 是一个流行的开源内存取证工具,专门用于分析内存镜像以发现
    在计算机取证中,Volatility是一个流行的开源内存取证工具,专门用于分析内存镜像以发现系统运行时的信息。它提供了丰富的功能和插件,用于检测和分析操作系统中的各种活动,包括进程、网络连接、注册表、文件系统等。下面是一些Volatility的基本特点和使用场景:主要特点:多平台支持......
  • 【操作系统】进程管理——进程的同步与互斥(个人笔记)
    学习日期:2024.7.8内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法进程同步与互斥的概念和意义为什么要有进程同步机制?回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征,即各个并发执行的进程以各自独立、不可预知的速度向前推进。但是,有的情况下,我们希......
  • 多进程优化顶点小说爬虫:加速爬取速度的深度优化策略
    顶点小说进阶(多进程+协程)建议:看之前可以先看我之前发布的文章(异步优化与数据入库:顶点小说爬虫进阶实战)这篇文章基于上篇文章:进行了多进程处理,大大加快了爬取速度案例:顶点小说完善(多进程)优化思路:导包:frommultiprocessingimportPool对于每一页的所有小说采用一个进程,建......
  • linux下更改进程为daemon的示例代码
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档linux下更改进程为daemon的示例代码前言使用chatgpt生成了一个更改进程为daemon的代码,无参函数,调用后直接更改进程为daemonchatgpt:通义千问,文心一言提示:以下是本篇文章正文内容,下面案例可供参考一、da......
  • Windows进程令牌相关信息的获取
    代码样例#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<conio.h>#include<string>#include<vector>#include<map>#include<list>#include<set>#include<......