Как определить процесс блокировки файла?

25

Я хочу знать точный процесс, который использует файл блокировки. Я не хочу исправлять , но просто знать, что делает моя система. Как я могу узнать?

Например, это сообщение:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Опять же, я просто хочу идентифицировать процесс, используя его, не , как его исправить.

    
задан Braiam 19.01.2014 в 03:24
источник

2 ответа

26

Существует пресловутый 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

В этом случае aptitude использует файл. Вы должны использовать root, если вы не уверены, какой пользователь блокирует файл. Это полезно для кучи вещей, к сожалению, он не устанавливается с Ubuntu, поэтому вам нужно сначала установить его.

Для остальных смертных есть команда fuser . Это характерно, поскольку он возвращает PID вместо имени процесса:

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

Здесь говорится, что файл и PID, который равен 4974, поэтому мы должны выяснить, кто:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude
    
ответ дан Braiam 19.01.2014 в 03:24
источник
4

lslocks - это простой способ сделать это.

lslocks |grep /var/lib/dpkg/lock

Для использования оболочки для обработки идентификатора процесса:

for pid in 'lslocks -rn | grep /var/lib/dpkg/lock|awk '{print }'';
do 
    echo $pid; 
done
    
ответ дан jolestar 21.10.2016 в 10:05