我想获取持有共享锁的 pid 列表/tmp/file
。使用简单的命令行工具可以实现这一点吗?
答案1
从
man lsof
:FD 是文件的文件描述符编号,或者:FD 后面跟着以下字符之一,描述文件打开的模式:
The mode character is followed by one of these lock characters, describing the type of lock applied to the file: R for a read lock on the entire file; W for a write lock on the entire file; space if there is no lock.
所以R
这3uR
意味着读/共享锁是由613
PID 发出的。
#lsof /tmp/file
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
perl 613 turkish 3uR REG 8,2 0 1306357 /tmp/file
直接读取
/proc/locks
比lsof
,perl -F'[:\s]+' -wlanE' BEGIN { $inode = (stat(pop))[1]; @ARGV = "/proc/locks" } say "pid:$F[4] [$_]" if $F[7] == $inode ' /tmp/file
答案2
fuser /tmp/file
将列出打开该文件的所有进程,包括那些锁定该文件的进程。