Come identificare il processo bloccando un file?


35

Voglio sapere il processo esatto che utilizza il file di blocco. Non voglio ripararlo , 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 utilizzandolo, non come risolverlo.

Risposte:


38

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. Dovresti usare root nel caso in cui non sei sicuro di quale utente stia bloccando il file. È utile anche per molte cose, purtroppo non viene installato con Ubuntu, quindi devi prima installarlo.

Per il resto dei mortali, c'è il fusercomando. Ciò è peculiare poiché restituisce solo il PID anziché il nome del processo:

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

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

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

6
Perché è lsofinfame? Ci sono dei problemi con esso?
Ruslan,

3
@Ruslan Sì, consente agli utenti che non conoscono l'effettivo utilizzo dei sistemi contrariamente a ciò che vogliono gli amministratori di sistema ...
Braiam

@Braiam Troppe informazioni possono essere pericolose, nelle mani giuste? ^ -_- ^
Peter David Carter,

Seconda opzione in una riga:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea,

8

lslocks è un modo semplice per farlo.

lslocks |grep /var/lib/dpkg/lock

Per utilizzare la shell per gestire l'ID processo:

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

Sì. lslocksè il modo migliore per farlo. L'utilizzo lsofmi ha dato questo errore: "lsof: ATTENZIONE: impossibile stat () file system fuse.gvfsd-fuse / run / user / 1000 / gvfs Le informazioni di output potrebbero essere incomplete"
Nav

@Nav non è un errore, ma un AVVISO.
Braiam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.