4

I would like to get a list of pid's which hold shared lock on /tmp/file. Is this possible using simple command line tools?

3
  • From man lsof:

    FD is the File Descriptor number of the file or: FD is followed by one of these characters, describing the mode under which the file is open:

              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.
    

So R in 3uR mean that read/shared lock is issued by 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

  • Reading directly from /proc/locks is faster than lsof,

    perl -F'[:\s]+' -wlanE'
      BEGIN { $inode = (stat(pop))[1]; @ARGV = "/proc/locks" }
      say "pid:$F[4] [$_]" if $F[7] == $inode
    ' /tmp/file
    
0

fuser /tmp/file will list all processes which have the file open, including those that have a lock on it.

  • Yes, and lsof is also aware of that but flock can refuse locking, or pid could wait for lock after file opening. – mpapec Sep 14 '13 at 11:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.