为什么“lsof /dev/video0”不足以检查哪些进程正在使用摄像头?

为什么“lsof /dev/video0”不足以检查哪些进程正在使用摄像头?

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 权限才能查看其他用户的进程正在执行的操作。

相关内容