A问题关于五年前的这个命令声称它lsof
不会使用 cam 监视所有进程。但是当我在运行 testcam 时运行命令时,我得到:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 3077 lax mem CHR 81,0 808 /dev/video0
firefox-b 3077 lax 143u CHR 81,0 0t0 808 /dev/video0
表示什么DEVICE
81,0
。我不太明白为什么它没有被监控,因为它显示块 81,0。
答案1
lsof /dev/video0
仅列出已/dev/video0
打开的进程。假设管理员运行以下命令:
mknod /somewhere/else c 81 0
然后程序就可以通过设备文件使用摄像头设备/somewhere/else
。此访问权限对于 不可见lsof /dev/video0
,但对于 可见lsof /somewhere/else
。
只有 root 可以创建设备节点。在正常系统上,/dev/video0
是网络摄像头的唯一设备文件。所以在实践中,lsof /dev/video0
确实列出了访问网络摄像头的所有进程。
答案2
DEVICE
81,0
根本不指代块:与TYPE
CHR
它一起表示该设备是一个字符设备,主设备号为 81,次设备号为 0。
从 中/proc/devices
,您可以看到字符设备主设备号 81 与子系统关联video4linux
。次要编号由每个子系统按照其认为合适的方式分配:在这种情况下,次要编号直接反映在/dev/video0
生成的设备名称中udev
。
传统上,类 UNIX 系统使用机器友好的设备编号作为设备的主要内部标识符,而不是人类友好的设备名称。整个/dev
目录树及其设备节点基本上是一个大的查找表,它允许内核的文件系统驱动程序将设备名称转换为设备编号,就像文件/etc/services
允许您使用端口名称(如ssh
或 )ntp
代替端口号(如 22 或分别为123。设备节点也可以拥有权限,这对于限制对设备驱动程序的不当访问也非常有用。
当您lsof
以普通用户身份运行时,它可能仅输出有关您自己的进程的信息:普通用户无法窥探其他用户的业务。需要 root 权限才能查看其他用户的进程正在执行的操作。