Я хочу знать точный процесс, который использует файл блокировки. Я не хочу исправить это, но просто чтобы знать, что делает моя система. Как я могу узнать?
Например, это сообщение:
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?
Опять же, я просто хочу определить процесс, используя его, не , как это исправить .
Существует печально известная 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
lslocks - простой способ сделать это.
lslocks |grep /var/lib/dpkg/lock
Для использования оболочки для обработки идентификатора процесса:
for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do
echo $pid;
done