Como identificar o processo de bloqueio de um arquivo?


35

Quero saber o processo exato que está usando o arquivo de bloqueio. Não quero corrigi- lo, mas apenas para 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, eu apenas quero identificar o processo usando-o, não como corrigi-lo.

Respostas:


38

Há 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

Nesse 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 várias coisas, infelizmente, ele não vem instalado com o Ubuntu, então você deve instalá-lo primeiro.

Para o resto dos mortais, existe o fusercomando. Isso é peculiar, pois retorna apenas 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 o PID, que é 4974, então devemos investigar quem é:

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

6
Por que é lsofinfame? Existem alguns problemas com isso?
Ruslan

3
@Ruslan Sim, ele permite que os usuários à nora conhecer o uso real do sistema ao contrário do que os administradores de sistemas quer ...
Braiam

@ Braiam Muita informação pode ser uma coisa perigosa, nas mãos certas? ^ -_- ^
Peter David Carter

Segunda opção em uma linha:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea 1/17/17

8

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 $2}'`;
do 
    echo $pid; 
done

Sim. lslocksé a melhor maneira de fazer isso. O uso lsofdeu-me este erro: "lsof: AVISO: não é possível stat () sistema de arquivos fuse.gvfsd-fuse / run / user / 1000 / gvfs As informações de saída podem estar incompletas"
Nav

@ Nav isso não é um erro, mas um AVISO.
Braiam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.