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


35

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

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

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?

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

Ответы:


38

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

6
Почему lsofпечально? Есть ли проблемы с этим?
Руслан

3
@Ruslan Да, это позволяет невежественным пользователям знать фактическое использование систем вопреки
желанию

@Braiam Слишком много информации может быть опасной вещью, в правильных руках? ^ -_- ^
Питер Дэвид Картер

Второй вариант в одной строке:ps $(sudo fuser /var/lib/dpkg/lock)
17

8

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

lslocks |grep /var/lib/dpkg/lock

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

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

Да. lslocksэто лучший способ сделать это. Использование lsofдало мне эту ошибку: «lsof: WARNING: не может stat () fuse.gvfsd-fuse файловая система / run / user / 1000 / gvfs Выходная информация может быть неполной»
Nav

@Nav это не ошибка, но ПРЕДУПРЕЖДЕНИЕ.
Брайам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.