/tmp/file
で共有ロックを保持しているpidのリストを取得したいと思います。これは簡単なコマンドラインツールを使用して可能ですか?
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.
したがって、3uR
のR
は、読み取り/共有ロックが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
fuser /tmp/file
は、ファイルがロックされているプロセスを含め、ファイルが開いているすべてのプロセスをリストします。