42 votes

Comment identifier le processus verrouillant un fichier?

Je veux connaître le processus exact utilisant le fichier de verrouillage. Je ne veux pas le résoudre, juste savoir ce que fait mon système. Comment puis-je le découvrir ?

Par exemple, ce message :

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?

Encore une fois, je veux juste identifier le processus qui l'utilise, pas comment le résoudre.

46voto

Braiam Points 64282

Voici le tristement célèbre 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

Dans ce cas, aptitude utilise le fichier. Vous devriez utiliser root dans le cas où vous n'êtes pas sûr quel utilisateur bloque le fichier. C'est également utile pour plein d'autres choses, malheureusement il n'est pas installé par défaut avec Ubuntu, vous devrez donc l'installer d'abord.

Pour le reste des mortels, il y a la commande fuser. Celle-ci est particulière car elle ne renvoie que le PID au lieu du nom du processus:

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

Ici, il indique le fichier et le PID, qui est 4974, donc nous devons enquêter qui est:

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

10voto

jolestar Points 201

Lslocks est un moyen simple de le faire.

lslocks |grep /var/lib/dpkg/lock

Pour utiliser le shell pour gérer l'identifiant du processus :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X