Como identificar o processo bloqueando um arquivo?

25

Eu quero saber o processo exato que está usando o arquivo de bloqueio. Eu não quero consertar , mas apenas saber o que meu sistema está fazendo. Como posso descobrir?

Por exemplo, esta mensagem:

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?

Mais uma vez, quero apenas identificar o processo que o utiliza, não como corrigi-lo.

    
por Braiam 19.01.2014 / 04:24

2 respostas

28

Existe o infame 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

Neste caso, o aptitude está usando o arquivo. Você deve usar root caso não tenha certeza de qual usuário está bloqueando o arquivo. Também é útil para um monte de coisas, infelizmente não vem instalado com o Ubuntu, então você tem que instalá-lo primeiro.

Para o resto dos mortais, há o comando fuser . Isso é peculiar, pois só retorna o PID em vez do nome do processo:

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

Aqui diz que o arquivo e PID, que é 4974, então devemos investigar quem é:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude
    
por Braiam 19.01.2014 / 04:24
4
O lslocks é uma maneira simples de fazer isso.

lslocks |grep /var/lib/dpkg/lock

Para usar o shell para manipular o ID do processo:

for pid in 'lslocks -rn | grep /var/lib/dpkg/lock|awk '{print }'';
do 
    echo $pid; 
done
    
por jolestar 21.10.2016 / 12:05

Tags