哪个设备正在工作

哪个设备正在工作

我的系统中有一张dvb-t和一张dvb-s卡,位于

/dev/dvb/adapter0

/dev/dvb/adapter1

有没有办法找出当前正在使用的卡?哪一个不是?

答案1

您可以使用lsof查看哪些进程正在使用文件。在你的情况下:

$ lsof /dev/dvb/adapter0
$ lsof /dev/dvb/adapter1

每次调用都会为您提供向您的设备请求处理程序(文件描述符)的进程列表。如果没有打印任何内容,您可以断定您的设备当前未被使用。以下是/dev/urandomConky、Chromium 和 Thunderbird 在我的系统上使用的示例:

$ lsof /dev/urandom
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
conky     ---- ----    3r   CHR    1,9      0t0 1034 /dev/urandom
chromium- ---- ----   55r   CHR    1,9      0t0 1034 /dev/urandom
thunderbi ---- ----   24r   CHR    1,9      0t0 1034 /dev/urandom

r(在 FD 字段中)意味着进程已请求读访问:前面的数字是它们的描述符编号。 CHR1,9是设备类型和主/次编号。0t0是该描述符的当前文件偏移量,1034 是设备文件的索引节点号(在我的系统上)。

有关此输出的更多信息,请参阅lsof(8)。顺便说一下,lsof根据是否找到文件的进程返回不同的状态代码。这意味着您可以在 shell 脚本中非常简单地使用它:

#!/bin/bash

if lsof /dev/dvb/adapter0 > /dev/null 2>&1; then
    echo "Adapter 0 is in use."
elif lsof /dev/dvb/adapter1 > /dev/null 2>&1; then
    echo "Adapter 1 is in use."
else
    echo "No adapter is in use."
fi

相关内容