linux查找设备被哪个进程占用、proc目录简介

最近调试设备发现两个板子之间的串口通信出现故障,排除硬件问题之后怀疑是别的进程占用了串口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
各位路过的老铁,有收获的话就点个赞吧

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值