文件对应于 /proc/locks

5 linux lock files

$ cat /proc/locks
1:POSIX 建议写 458 03:07:133880 0 EOF
2:FLOCK ADVISORY WRITE 404 03:07:133879 0 EOF

这些字段是:序号(1)、类型(2)、模式(3)、类型(4)、pid(5)、maj:min:inode(6) start(7) end(8)。

问题:如何找到被锁定的对应文件?

Sté*_*las 7

sudo find -L /proc/458/fd -maxdepth 1 -inum 133880 -print -exec readlink {} \;
Run Code Online (Sandbox Code Playgroud)

要获得所有这些:

while IFS=': ' read x x x x p x x i x; do
  sudo find -L "/proc/$p/fd" -maxdepth 1 -inum "$i" -exec readlink {} \; -quit
done < /proc/locks
Run Code Online (Sandbox Code Playgroud)

有时,pid被引用的进程/proc/lock会死掉。您可以将"/proc/$p/fd"以上更改/proc/*/fd为在所有进程 fds 中查找它们。

(请注意,这是一个近似值,因为我们只检查 inode 编号,而不是设备编号,但我们选择错误文件(不同 fs 上的相同 inum)的可能性非常小)。