6

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?

2 Answers 2

6
  • 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.

2
  • 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, 2013 at 11:33
  • No, it will not necessary list all processes, only processes on the same System. This can break for network storage. Nov 21, 2022 at 11:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .