Come identificare il processo bloccando un file?

26

Voglio conoscere il processo esatto che sta utilizzando il file di blocco. Non voglio correggerlo , ma solo per sapere cosa sta facendo il mio sistema. Come posso scoprirlo?

Ad esempio, questo messaggio:

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?

Ancora una volta, voglio solo identificare il processo che lo utilizza, non come risolverlo.

    
posta Braiam 19.01.2014 - 04:24

2 risposte

28

C'è il famigerato 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

In questo caso aptitude sta usando il file. Si dovrebbe usare root nel caso in cui non si è sicuri di quale utente stia bloccando il file. È utile anche per un sacco di cose, purtroppo non viene installato con Ubuntu, quindi devi prima installarlo.

Per il resto dei mortali, c'è il comando fuser . Questo è particolare poiché restituisce solo il PID al posto del nome del processo:

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

Qui dice che il file e il PID, che è 4974, quindi dobbiamo investigare chi è:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude
    
risposta data Braiam 19.01.2014 - 04:24
4

lslocks è un modo semplice per farlo.

lslocks |grep /var/lib/dpkg/lock

Per usare la shell per gestire l'id del processo:

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

Leggi altre domande sui tag