监控文件锁,使用flock锁定

监控文件锁,使用flock锁定

我想获取持有共享锁的 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.
    

所以R3uR意味着读/共享锁是由613PID 发出的。

#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/lockslsof,

    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将列出打开该文件的所有进程,包括那些锁定该文件的进程。

相关内容