2026.4.16Linux 管道

1.kill()可以杀死进程

Int kill(pid_t,int sig);

-2:ctrl c -9:彻底杀死

2.进程间通信

①管道:

特性:

  1. 管道是单向的,数据只能从左到右
  2. 管道实际上会创建子进程来执行命令
  3. 管道中的命令是并行执行的
  4. 管道可以串联,形成管道链

有名管道:通过mkfifo 管道名

特性:

  1. 有可见的文件名(存在于文件系统中)
  2. 可以被任意进程(需要有权限)访问
  3. 数据传输遵循先进先出原则
  4. 本质上是内存中的特殊文件,不占用磁盘空间
  5. 关闭所有引用他的进程后,管道文件依然存在(需要手动删除)

测试一:在命令行去输入信息

读端,持续监听管道 cat < 管道文件 持续读取 while true;do cat < 管道文件;done

写端,多次写入内容 cat > 管道文件

测试二:在文件中写入和读取

读文件:使用raed函数写入管道文件,注意read函数第三个参数不能是初始化的strlen

写文件:使用write函数写数据到管道文件中

无名管道:无名称,仅通过文件描述符访问

特性:

  1. 仅支持亲缘进程:父子,兄弟
  2. 创建方式:pipe()系统调用
  3. 生命周期:随进程结束而销毁

|-------|-----------|----------|
| | 有名管道 | 无名管道 |
| 名称 | 存在文件系统中 | 不在文件系统中 |
| 进程的关系 | 任意进程 | 父子,兄弟 |
| 生命周期 | 文件系统销毁而销毁 | 随进程销毁而销毁 |
| 创建方式 | mkfifo | Pipe |

注意事项:

  1. 避免管道破裂,其中读端已关闭的情况下,写端还在输出数据,会触发sigpipe信号,终止写端进程
  2. 数据无边界:管道是字节数据流,若按照消息的格式,一条一条发送,需要自定义信息格式(长度+数据),避免多读少读
  3. 缓冲区的阻塞问题:读空,写满会阻塞进程,所以会需要fcntl()设置属性进行处理
  4. 资源泄露问题:进程退出前提前关闭管道描述符,会导致缓冲区中的数据丢失
相关推荐
剑神一笑2 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz3 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
剑神一笑3 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
来杯@Java4 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记4 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥4 小时前
匿名函数 lambda + 高阶函数
java·python·算法
東雪木5 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r5 小时前
Java调用链MCP分析工具
java·python·ai编程
噜噜噜阿鲁~5 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言