web-dev-qa-db-ja.com

flockを使用してロックされたファイルロックの監視

/tmp/fileで共有ロックを保持しているpidのリストを取得したいと思います。これは簡単なコマンドラインツールを使用して可能ですか?

4
mpapec
  • 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.
    

したがって、3uRRは、読み取り/共有ロックが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
    
3
mpapec

fuser /tmp/fileは、ファイルがロックされているプロセスを含め、ファイルが開いているすべてのプロセスをリストします。

0
msw