我的系统中有一张dvb-t
和一张dvb-s
卡,位于
/dev/dvb/adapter0
和
/dev/dvb/adapter1
有没有办法找出当前正在使用的卡?哪一个不是?
答案1
您可以使用lsof
查看哪些进程正在使用文件。在你的情况下:
$ lsof /dev/dvb/adapter0
$ lsof /dev/dvb/adapter1
每次调用都会为您提供向您的设备请求处理程序(文件描述符)的进程列表。如果没有打印任何内容,您可以断定您的设备当前未被使用。以下是/dev/urandom
Conky、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 字段中)意味着进程已请求读访问:前面的数字是它们的描述符编号。 CHR
和1,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