必须用sudo lsof /dev/video0或sudo fuser -v /dev/video0直接检查设备占用,输出command和pid可精确定位摄像头持有进程;若lsof未安装则先执行sudo apt install lsof。

在银河麒麟系统中确认哪些进程正在实时占用摄像头,必须绕过图形界面的模糊提示,直接从内核设备层和进程文件描述符切入——因为普通进程管理器不显示设备级资源占用,仅靠top或任务管理器无法定位摄像头持有者。
检查摄像头设备被哪些进程打开
执行命令查看当前所有进程对/dev/video*的打开状态:
sudo lsof /dev/video0
若系统有多个摄像头设备(如/dev/video1),需分别替换路径重试。该命令输出中COMMAND列为进程名,PID为进程号,USER为运行用户。没有输出则说明暂无进程正在访问该设备。
【关键前提】若提示command not found,先安装lsof:sudo apt install lsof(银河麒麟V10 SP1及以上默认未预装)。
通过/proc文件系统精确定位摄像头调用者
方法一:遍历所有进程的fd目录,搜索video设备链接
for pid in /proc/[0-9]*; do if ls -l "$pid/fd/" 2>/dev/null | grep -q "video"; then echo "PID $(basename $pid)"; cat "$pid/cmdline" 2>/dev/null | tr '\0' ' '; echo; fi; done
这行脚本会逐个检查每个进程的文件描述符,一旦发现指向/dev/video*的符号链接,就打印其PID和启动命令。注意:部分进程(如浏览器沙箱子进程)可能显示为空白cmdline,此时需结合PID查ps -p PID -o pid,ppid,comm,args进一步确认父进程。
方法二:用fuser快速定位(更简洁)
sudo fuser -v /dev/video0
输出格式为表格,包含USER、PID、ACCESS(f表示文件读写)、COMMAND四列。ACCESS列若显示f或fm,代表该进程正以读/内存映射方式使用摄像头。
验证摄像头是否被Chrome/Edge等浏览器独占
第一步:检查浏览器是否启用硬件加速
在地址栏输入chrome://settings/system(Chrome)或edge://settings/system(Edge),关闭“使用硬件加速模式(如果可用)”。重启浏览器后重试摄像头应用。
第二步:强制释放WebRTC占用
在地址栏输入chrome://webrtc-internals,点击右上角“Clear data”,再刷新页面。此操作会终止所有WebRTC会话,释放底层V4L2设备句柄。
第三步:确认无隐身窗口残留
即使关闭所有标签页,Chrome隐身窗口可能仍在后台维持摄像头连接。需彻底退出浏览器(右键任务栏图标→退出,或killall chrome)。











