有没有办法知道 Linux 中当前有多少进程正在打开一个文件?
答案1
lsof 可以这样做:
lsof <filename>
例如:
┌─[root@Fedora]─[~]─[02:39 pm]
└─[$]› lsof scripts/network_menu.sh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
less 26419 root 4r REG 253,1 67271 931810 scripts/network_menu.sh
network_m 26572 root 255r REG 253,1 67271 931810 scripts/network_menu.sh
上面的第一个实例是我以 root 身份在文件上运行“less”,第二个实例是由 root 运行的脚本。
答案2
用命令试试lsof /path/filename
它将向您显示正在使用该文件的进程的详细信息。
答案3
lsof
将告诉哪些进程在该时间点打开了文件,但如果您想查看一段时间内有多少进程打开了文件,您可以使用inotifywait
或inotifywatch
。
在监控模式下可以设置 inotifywait 来持续报告指定文件上的事件:
inotifywait -m -r /lib*
inotifywatch 可以提供一段时间内事件的摘要:
inotifywatch -t 10 -r /lib*
由于您要求进程打开文件,因此您可以添加选项-e open
来限制输出仅显示 OPEN 事件:
inotifywait -e open -m -r /lib*