linux基本功系列之lsof命令实战
文章目录
- 前言
- 一. lsof命令介绍
- 二. 语法格式及常用选项
- 三. 参考案例
- 3.1 显示系统打开的文件
- 3.2 查找某个文件相关的进程
- 3.3 列出某个用户打开的文件信息
- 3.4 列出某个程序进程所打开的文件信息
- 3.5 查看某个进程号打开的文件
- 3.6 列出所有的网络连接
- 3.7 列出谁在使用某个端口
- 3.8 恢复误删除的文件
- 总结
前言
大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第45篇文章。
专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
一. lsof命令介绍
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
lsof 查看的文件可以是:
- 普通文件
- 目录
- 字符或块设备文件
- 共享库
- 管道、命名管道
- 符号链接
- 网络文件(如 NFS file、网络 socket,Unix 域名 socket)
- 其它类型的文件,等等
二. 语法格式及常用选项
常用的命令选项如下表:
参数 | 描述 |
---|---|
-a | 列出打开文件存在的进程 |
-c | <进程名> 列出指定进程所打开的文件 |
-g | 列出GID号进程详情 |
-d | <文件号> 列出占用该文件号的进程 |
+d | <目录> 列出目录下被打开的文件 |
+D | <目录> 递归列出目录下被打开的文件 |
-n | <目录> 列出使用NFS的文件 |
-i | <条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip ) |
-p | <进程号> 列出指定进程号所打开的文件 |
-u | 列出UID号进程详情 |
-h | 显示帮助信息 |
-v | 显示版本信息 |
三. 参考案例
3.1 显示系统打开的文件
也就是查找谁在使用文件系统:
在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
[root@mufenggrow ~]# lsof |head -5
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1616360 17335469 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20112 171185 /usr/lib64/libuuid.so.1.3.0
[root@mufenggrow ~]#
输出的内容,第一行的参数解释:
参数 | 描述 |
---|---|
COMMAND: | 进程的名称 |
PID | 进程标识符 |
USER | 进程所有者 |
FD | 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 |
TYPE | 文件类型,如DIR、REG等 |
DEVICE | 指定磁盘的名称 |
SIZE | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
NAME | 打开文件的确切名称 |
关于FD列的介绍:
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上面代码中显示的 /usr/lib/systemd/systemd程序
其他常用的参数如下表:
参数 | 描述 |
---|---|
cwd | 表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改 |
txt | 该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序 |
lnn | library references (AIX); |
er | FD information error (see NAME column); |
jld | jail directory (FreeBSD); |
ltx | shared library text (code and data); |
mem | memory-mapped file; |
mmap | memory-mapped device; |
pd | parent directory; |
rtd | root directory; |
tr | kernel trace file (OpenBSD); |
0 | 表示标准输出 |
1 | 表示标准输入 |
2 | 表示标准错误 |
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
(1)u:表示该文件被打开并处于读取/写入模式
(2)r:表示该文件被打开并处于只读模式
(3)w:表示该文件被打开并处于
(4)空格:表示该文件的状态模式为unknow,且没有锁定
(5)-:表示该文件的状态模式为unknow,且被锁定
关于Type 列的介绍:
缩写 | 含义 |
---|---|
DIR | 表示目录 |
CHR | 表示字符类型 |
BLK | 块设备类型 |
UNIX UNIX 域套接字 | |
FIFO | 先进先出 (FIFO) 队列 |
IPv4 | 网际协议 (IP) 套接字 |
3.2 查找某个文件相关的进程
查找某个文件相关的进程,换句话说就是查看谁在使用某个文件
[root@mufenggrow ~]# lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ksmtuned 6230 root txt REG 253,0 964608 50423603 /usr/bin/bash
bash 19925 root txt REG 253,0 964608 50423603 /usr/bin/bash
bash 20483 root txt REG 253,0 964608 50423603 /usr/bin/bash
bash 21114 root txt REG 253,0 964608 50423603 /usr/bin/bash
可以看到PID,进程号,和某个命令command
3.3 列出某个用户打开的文件信息
创建一个mufeng用户,然后使用lsof -u 进行查看,mufeng用户打开的文件信息
[root@mufenggrow ~]# useradd mufeng
[root@mufenggrow ~]# echo 123456 |passwd --stdin mufeng
更改用户 mufeng 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@mufenggrow ~]# su - mufeng
[mufeng@mufenggrow ~]$ vim a.txt
查看mufeng用户打开的文件信息:
[root@mufenggrow ~]# lsof -u mufeng
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 73251 mufeng cwd DIR 253,0 139 33788283 /home/mufeng
bash 73251 mufeng rtd DIR 253,0 224 64 /
bash 73251 mufeng txt REG 253,0 964608 50423603 /usr/bin/bash
如果我们创建好用户但是不登录:
[root@mufenggrow ~]# useradd mufenggrow
[root@mufenggrow ~]# lsof -u mufenggrow
可以看到如果不登录,查看不到任何信息。
如果不想显示某个用户打开的进程,可以使用^
lsof -u ^root 表示不查看root用户打开的进程,换句话说就是root用户打开的进程不显示。
3.4 列出某个程序进程所打开的文件信息
比如我们查看MySQL进程,使用-C 参数, -c 选项将会列出所有以mysql这个进程开头的程序的文件
[root@mufenggrow ~]# yum install mariadb -y
## 此时没有启动进程,可以发现未输出任何内容
[root@mufenggrow ~]# lsof -c mysql
#启动MySQL
[root@mufenggrow ~]# systemctl restart mariadb
[root@mufenggrow ~]# lsof -c mysql
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld_sa 73597 mysql cwd DIR 253,0 224 64 /
mysqld_sa 73597 mysql rtd DIR 253,0 224 64 /
mysqld_sa 73597 mysql txt REG 253,0 964608 50423603
如果想看多个进程打开的多个文件,可以加多个-c参数。
比如:
lsof -c mysql -c apache
3.5 查看某个进程号打开的文件
这里用到-p参数,查看进程号为1的进程号打开的文件
[root@mufenggrow ~]# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
如果要查看多个进程号对应的文件:
lsof -p 1,2,3
3.6 列出所有的网络连接
在这里我们可以使用 -i 列出网络连接
-i tcp 表示列出所有tcp相关的网络连接信息
-i upd 表示列出所有UDP相关的网络连接信息
[root@mufenggrow ~]# lsof -i udp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 87u IPv4 33667 0t0 UDP *:sunrpc
systemd 1 root 146u IPv6 33669 0t0 UDP *:sunrpc
rpcbind 6105 rpc 5u IPv4 33667 0t0 UDP *:sunrpc
rpcbind 6105 rpc 7u IPv6 33669 0t0 UDP *:sunrpc
rpcbind 6105 rpc 10u IPv4 34871 0t0 UDP *:rxe
rpcbind 6105 rpc 11u IPv6 34872 0t0 UDP *:rxe
avahi-dae 6158 avahi 12u IPv4 37772 0t0 UDP *:mdns
avahi-dae 6158 avahi 13u IPv4 37773 0t0 UDP *:58076
chronyd 6176 chrony 1u IPv4 38347 0t0 UDP localhost:323
chronyd 6176 chrony 2u IPv6 38348 0t0 UDP localhost:323
dnsmasq 7293 nobody 3u IPv4 46027 0t0 UDP *:bootps
dnsmasq 7293 nobody 5u IPv4 46030 0t0 UDP mufenggrow:domain
dhclient 21569 root 6u IPv4 93194 0t0 UDP *:bootpc
3.7 列出谁在使用某个端口
此时也是用 -i参数
[root@mufenggrow ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 73762 mysql 14u IPv4 169606 0t0 TCP *:mysql (LISTEN)
我们遇到端口冲突的时候,可以使用lsof查看端口是否被占用。
3.8 恢复误删除的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。
有时候管理错误也可能导致意外删除某些重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。
这时候可以尝试使用lsof来恢复:
使用lsof 恢复文件的原理:
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。
这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。
在/proc 目录下,其中包含了反映内核和进程树的各种文件,/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在磁盘中,当我们写入和读取信息的时候,实际是从内存中获取相关的信息。
我们来看看恢复过程,实验过程如下:
- 创建一个目录并创建一个文件
- 在另一个窗口打开这个文件,并保持一直打开的状态,比如使用vim命令
- 在第一个创建删掉文件
- 使用lsof进行恢复
# 创建文件
[root@mufenggrow ~]# mkdir test
[root@mufenggrow ~]# cd test/
# 拷贝一份文件过来
[root@mufenggrow test]# cp /etc/passwd ./#在另一个窗口使用vim打开文件
# [root@mufenggrow ~]# vim passwd
# 删除文件
[root@mufenggrow test]# rm -rf passwd
# 用lsof来查看当前是否有进程打开passwd文件
[root@mufenggrow test]# lsof |grep passwd
cupsd 6850 root 10r REG 253,0 2323 17951309 /etc/passwd+ (deleted)
vim 74174 root 4u REG 253,0 12288 33994260 /root/.passwd.swp# 这里我们发现PID6850 打开文件的文件描述符为10, 另外在passwd后面看到delete字样。
接下来我们打开文件描述符为10的文件:[root@mufenggrow test]# head -n 10 /proc/6850/fd/10
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@mufenggrow test]# ls
#通过上面的命令我们可以确认,这个描述符为10的文件就是我们要恢复的文件
使用重定向进行文件恢复
[root@mufenggrow test]# cat /proc/6850/fd/10 > passwd
# 查看是否执行成功[root@mufenggrow test]# cat passwd |head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@mufenggrow test]#
我们通过上面的案例可以看到,已经恢复成功了,这里的前提就是,被删除的文件一定要有进程在使用。
总结
以上就是关于lsof命令的全部内容了,喜欢的小伙伴,一键三连哦。
✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!
相关文章:

linux基本功系列之lsof命令实战
文章目录前言一. lsof命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示系统打开的文件3.2 查找某个文件相关的进程3.3 列出某个用户打开的文件信息3.4 列出某个程序进程所打开的文件信息3.5 查看某个进程号打开的文件3.6 列出所有的网络连接3.7 列出谁在使用某个端口3.8 恢…...

基础篇:02-SpringCloud概述
1.SpringCloud诞生 基于前面章节,我们深知微服务已成为当前开发的主流技术栈,但是如dubbo、zookeeper、nacos、rocketmq、rabbitmq、springboot、redis、es这般众多技术都只解决了一个或一类问题,微服务并没有一个统一的解决方案。开发人员或…...

【软件测试】软件测试工作上95%会遇到的问题,你遇到多少?
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 1、测试负责人要进行…...

4.5.4 LinkedList
文章目录1.特点2.常用方法3.练习:LinkedList测试1.特点 链表,两端效率高,底层就是链表实现的 List接口的实现类,底层的数据结构为链表,内存空间是不连续的 元素有下标,有序允许存放重复的元素在数据量较大的情况下,查询慢&am…...

Python之FileNotFoundError: [Errno 2] No such file or directory问题处理
错误信息:FileNotFoundError: [Errno 2] No such file or directory: ../AutoFrame/temp/report.xlsx相对于当前文件夹的路径,其实就是你写的py文件所在的文件夹路径!python在对文件的操作时,需要特别注意文件地址的书写。文件的路…...
C语言中耳熟能详的printf与scanf
没有什么比时间更有说服力了,因为时间无需通知我们就可以改变一切了。---余华《活着》大家好,今天给大家分享的是C语言中的scanf与printf函数,一提起这两个函数,大家可能觉得这不就是打印和输入嘛?有什么可以说的&…...

【数据结构】复杂度讲解
目录 时间复杂度与空间复杂度:: 1.算法效率 2.时间复杂度 3.空间复杂度 4.常见时间复杂度以及复杂度OJ练习 时间复杂度与空间复杂度:: 什么是数据结构? 数据结构中是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关…...

JAVA-线程池技术
目录 概念 什么是线程? 什么是线程池? 线程池出现背景 线程池原理图 JAVA提供线程池 线程池参数 如果本篇博客对您有一定的帮助,大家记得留言点赞收藏哦。 概念 什么是线程? 是操作系统能够进行运算调度的最小单位。&am…...
【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用算法(算术生成算法)
文章目录一、accumulate二、fill学习目标: 掌握常用的算术生成算法 注意: 算术生成算法属于小型算法,使用时包含的头文件为 #include <numeric> 算法简介: accumulate // 计算容器元素累计总和 fill // 向容器中添加元…...

【C++】static成员
💙作者:阿润菜菜 📖专栏:C 目录 概念 特性 出个题 概念 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量; 用static修饰的成员函数,称之为静态…...

Python Scrapy 爬虫简单教程
1. Scrapy install 准备知识 pip 包管理Python 安装XpathCssWindows安装 Scrapy $>- pip install scrapy Linux安装 Scrapy $>- apt-get install python-scrapy 2. Scrapy 项目创建 在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中&am…...

【DOCKER】容器概念基础
文章目录1.容器1.概念2.特点3.与虚拟机的对比2.docker1.概念2.命名空间3.核心概念3.命令1.镜像命令2.仓库命令1.容器 1.概念 1.不同的运行环境,底层架构是不同的,这就会导致测试环境运行好好的应用,到了生产环境就会出现bug(就像…...

第九层(16):STL终章——常用集合算法
文章目录前情回顾常用集合算法set_intersectionset_unionset_difference最后一座石碑倒下,爬塔结束一点废话🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C的路上会越走越远,后面不定期更…...

一起学习用Verilog在FPGA上实现CNN----(六)SoftMax层设计
1 SoftMax层设计 1.1 softmax SoftMax函数的作用是输入归一化,计算各种类的概率,即计算0-9数字的概率,SoftMax层的原理图如图所示,输入和输出均为32位宽的10个分类,即32x10320 本项目softmax实现逻辑为: …...

pixhawk2.4.8-APM固件-MP地面站配置过程记录
目录一、硬件准备二、APM固件、MP地面站下载三、地面站配置1 刷固件2 机架选择3 加速度计校准4 指南针校准5 遥控器校准6 飞行模式7 紧急断电&无头模式8 基础参数设置9 电流计校准10 电调校准11 起飞前检查(每一项都非常重要)12 飞行经验四、遇到的问…...

【unity细节】关于资源商店(Package Maneger)无法下载资源问题的解决
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐关于资源商店为何下载不了的问题⭐ 文章目录⭐关于资源商店为何下载不了的问题…...

[Arxiv 2022] A Novel Plug-in Module for Fine-Grained Visual Classification
Contents MethodPlug-in ModuleLoss functionExperimentsReferencesMethod Plug-in Module Backbone:为了帮助模型抽取出不同尺度的特征,作者在 backbone 里加入了 FPNWeakly Supervised Selector:假设 backbone 的 i i...

RocketMQ Broker消息处理流程及部分源码解析
🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年2月10日 &#x…...

Java面试题:Java集合框架
文章目录一、Java集合框架二、Java集合特性三、各集合类的使用ArrayListLinkedListHashSetHashSet源码解析对源码进行总结HashSet可同步HashSet的使用HashMap四、Iterator迭代器五、遍历集合元素的若干方式参考文章:Hash详解参考文章:深入浅出学Java——…...
时间之间的比较与计算相差年、月、日、小时、分钟、毫秒、纳秒以及判断闰年--LocalDateTime
如何把String/Date转成LocalDateTime参考String、Date与LocalDate、LocalTime、LocalDateTime之间互转 String、Date、LocalDateTime、Calendar与时间戳之间互相转化参考String、Date、LocalDateTime、Calendar与时间戳之间互相转化 比较方法介绍 isBefore(ChronoLocalDateT…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...