最近调试设备发现两个板子之间的串口通信出现故障,排除硬件问题之后怀疑是别的进程占用了串口ttymxc2,所以写了一个脚本来查看都有哪些进程使用了ttymxc2。
1、/proc目录简介
Linux中一切皆文件,Linux的一切东西都能通过文件的形式访问,它们在根目录中也有对应的结构,如/dev、/mount,但它们本质都不是文件,但是能通过文件的思想去操控,这是操作系统层面的oop思想。
/proc目录提供了从文件系统访问进程的一个方法,在当前路径下每个进程拥有属于自己的文件夹,文件夹以独一无二的进程号命名,索引方式/proc/pidnumber,如:/proc/1,是1号进程的目录
/proc/pidnumber的一些重点目录/文件如下:
1、cmdline文件
/proc/pidnumber/cmdline存储了启动该进程的shell命令
2、cwd软连接
cwd是一个软连接,指向进程运行目录
3、environ文件
environ文件存储了进程的环境变量
4、fd目录
fd目录是file descriptor,文件描述符,该目录存储了指向当前进程操作过的文件的软连接,以数字0开始命名,通过它可以获取进程中有关的配置文件和进程操作过和正在操作的文件,本文就是依赖此目录中的文件来查找哪些进程使用了/dev/ttymxc2
2、开始写脚本
废话不多说上代码
#创建一个脚本
touch test.sh
#编辑脚本代码
vi test.sh
代码如下
#!/bin/sh
#判断,并删除上一次运行打印的log文件
if [ -e test.log ]
then
rm test.log
fi
#判断是否有参数,参数个数是否为1
if [ $# -ne 1 ]
then
#打印错误信息
echo "please input your parameter when run test.sh!"
#程序非正常退出,exit 0:正常运行程序并退出程序
exit 1
fi
#开启for循环,循环遍历/proc目录下的进程文件
for process in /proc/*
do
#判断是否存在文件,不存在为1
if [ ! -e ${process}/fd ]
then
#for循环遇到continue,那么跳过本次循环,直接进入下次循环
continue
fi
#运行指令 ls -l ${process}/fd | grep "$1 将返回结果存入str变量
str=`ls -l ${process}/fd | grep "$1"`
#如果字符串长度不为0
if [ -n "$str" ]
then
#将当前进程信息打印到test.log文件中
echo $process >> test.log
echo $process
fi
done
可以看到 进程号 237和280的进程使用了ttymxc2
各位路过的老铁,有收获的话就点个赞吧