How to identify the process locking a file?

There is the infamous lsof:

sudo lsof /var/lib/dpkg/lock
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aptitude 4974 root    3uW  REG   8,23        0 815673 /var/lib/dpkg/lock

In this case aptitude is using the file. You should use root in case you are not sure which user is locking the file. It's useful for a bunch of things too, sadly it doesn't come installed with Ubuntu, so you have to install it first.

For the rest of mortals, there's the fuser command. This is peculiar since it only returns the PID instead of the name of the process:

➜  ~  sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock:   4974

Here it says that the file and PID, which is 4974, so we must investigate who is:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude

lslocks is a simple way to do that.

lslocks |grep /var/lib/dpkg/lock

For use shell to handle the process id:

for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do 
    echo $pid; 
done

Tags:

Process