Linux命令-----lsof

lsof(list open files)是一个查看进程打开的文件的工具.

lsof是系统管理/安全的尤伯工具. 将这个工具称之为lsof真实名副其实, 因为它是指“列出打开文件 (lists openfiles) ”. 而有一点要切记, 在Unix中一切(包括网络套接口)都是文件.

简单说一下为什么要使用这个命令, 在之前的时间中, 一直在做Linux下串口的通信, 总所周知, Linux下一切皆文件, 串口也不例外, 我们在Linux下的操作都是打开, 读, 写, 关闭. 在使用串口过程中, 涉及到做测试, 有时会忘记关闭这个串口, 就产生了这个串口一直被打开的状态, 此时我们在串口已经被打开的状态下, 继续打开这个串口, 这个是没有影响的, 但是我们给串口发送AT指令, 我们可以看到一个奇怪的现象, 怎么有些时候会接收到会应, 有些时候又接收不到呢? 这个时候就去找问题所在, 发现代码并没有问题, 而且也能偶尔接收到正确的会应, 通过ps aux 查看所有进程, 发现了好多对串口进行操作的进程同时在运行.
此时已经定位到问题所在, 开始解决问题. 初步想到了一个方法, Linux下一切皆文件, 那既然是文件, 那么给文件加锁, 在打开之后, 给他加上互斥锁, 这样可以解决重复被打开的问题. 此时又有一个问题出现, 如果我们调用的是Linux下串口调试工具busybox, 这时并不能对此文件进行加锁处理, 而我们手动给文件加锁的方法也失效了.(说明一下, 是由自己写的代码实现了串口的打开, 读写, 关闭操作, 所以说更在意的是对串口进行操作时, 他有没有被其他进程打开, 影响了发送AT指令的回应是否能被及时收到)
这个时候就想Linux下有没有能查看文件被谁使用的命令或者函数, 此时找到了lsof这个命令, 我们可以在调用打开这个串口之前, 使用popen()函数执行, lsof命令 查看即将打开的串口被没被使用.

在这里插入图片描述在这里插入图片描述在这里插入图片描述

以上图片可以看到, 俩个进程同时打开ttyUSB4串口, 在第二张图中, 我们发送AT, 并没有得到回应, 而是在第一张图中收到了回应, 我们使用 lsof /dev/ttyUSB4 可以查看ttyUSB4 被microcom和comport打开. 根据这个现象可以在我们的代码中, 打开串口之前, 做一个popen()函数, 发送lsof 命令, 做一个判断. 能充分的解决我们的问题.

有关lsof命令的内容还在继续更新…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值