有没有办法知道有多少进程正在打开一个文件?

有没有办法知道有多少进程正在打开一个文件?

有没有办法知道 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将告诉哪些进程在该时间点打开了文件,但如果您想查看一段时间内有多少进程打开了文件,您可以使用inotifywaitinotifywatch

在监控模式下可以设置 inotifywait 来持续报告指定文件上的事件:

inotifywait -m -r /lib*

inotifywatch 可以提供一段时间内事件的摘要:

inotifywatch -t 10 -r /lib*

由于您要求进程打开文件,因此您可以添加选项-e open来限制输出仅显示 OPEN 事件:

inotifywait -e open -m -r /lib*

相关内容