¿Cómo identificar el proceso de bloqueo de un archivo?

26

Quiero saber el proceso exacto que está usando el archivo de bloqueo. No quiero corregirlo , solo para saber qué está haciendo mi sistema. ¿Cómo puedo averiguarlo?

Por ejemplo, este mensaje:

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?

Una vez más, solo quiero identificar el proceso que lo usa, no cómo solucionarlo.

    
pregunta Braiam 19.01.2014 - 03:24

2 respuestas

28

Existe el 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

En este caso, aptitude usa el archivo. Debería usar root en caso de que no esté seguro de qué usuario está bloqueando el archivo. También es útil para un montón de cosas, lamentablemente no viene instalado con Ubuntu, por lo que debes instalarlo primero.

Para el resto de los mortales, está el comando fuser . Esto es peculiar ya que solo devuelve el PID en lugar del nombre del proceso:

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

Aquí dice que el archivo y el PID, que es 4974, entonces debemos investigar quién es:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude
    
respondido por el Braiam 19.01.2014 - 03:24
4

lslocks es una forma simple de hacer eso.

lslocks |grep /var/lib/dpkg/lock

Para usar shell para manejar la identificación del proceso:

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

Lea otras preguntas en las etiquetas