
Scoprire chi o cosa utilizza una risorsa

Sappiamo tutti che quando
un file è in uso da un
qualsiasi programma non è
possibile smontare l’hard disk o la
partizione che lo contiene. La stessa
cosa accade per qualsiasi altro
tipo di memoria: penne USB, CD,
DVD, memory card e così via).
Questo comportamento serve per
evitare la perdita di dati dovuta alla
“rimozione” improvvisa del
dispositivo di memorizzazione.
Purtroppo, però, in alcuni casi,
questo semplice sistema di
protezione può creare qualche
problema. Ad esempio, può
succedere di ritrovarsi con
partizioni che non si smontano, o
ancora CD e DVD che il PC non
riesce ad espellere. Certo, è
sempre possibile forzare la
rimozione del supporto, ma prima
di farlo è bene terminare tutti i
programmi che bloccano la
risorsa, in pratica quelli che in un
modo e nell’altro ancora la
utilizzano.
La ricerca del “colpevole”
non è sempre facile, anche
perché basta un programma
bloccato ma non più visibile che
accede a un file o anche la stessa
shell che si trova proprio in una
directory presente nel supporto di
memorizzazione perché il sistema
rifiuti di smontare il dispositivo
restituendo l’errore seguente:
umount: /media/disk failed:
device is busy
In questi casi, l’unico modo per
individuare il processo che occupa
la risorsa e la blocca è usare il comando
fuser. Utilizzando questo
semplice programma è possibile,
in qualsiasi momento, individuare
il PID dei processi che utilizzano
un determinato file, una directory
o l’intero dispositivo. Ad esempio,
per scoprire quale programma sta
utilizzando un file, basta eseguire
il comando fuser -v nome_del_
file. Ovviamente, può trattarsi
anche di una directory, così, per
controllare l’accesso ad una pendrive
USB montata nella cartella /
media/disk è sufficiente usare il
comando fuser -um /media/disk.
In questo modo, otterremo l’elenco
di tutti i processi che stanno usando
la penna USB e, utilizzando
lo switch -u, anche i relativi utenti
che li hanno eseguiti. Inoltre, poiché
la directory viene identificata
come mount point dalla direttiva
-m, tutte le sotto cartelle e i file in
essa contenuti saranno sottoposti
a verifica da parte del programma.
A questo punto, individuare i
singoli processi che “bloccano” la
rimozione della risorsa diventa facilissimo,
ma si può andare oltre e
chiedere al programma di chiuderli
automaticamente. Questo può
essere fatto utilizzando lo switch
-k (kill). Ad esempio, per terminare
tutti i processi che stanno accedendo al Cd-Rom (bloccando
di fatto l’esecuzione del comando
umount), basta eseguire fuser
-kim /media/cdrom. Ovviamente,
il comando va modificato in base
alla configurazione del proprio
sistema, dove la directory di mount
potrebbe essere diversa. Inoltre,
aggiungendo lo switch -i, come in
questo caso, verrà chiesta conferma
prima di terminare ogni singolo
processo. È ovvio, che fuser non
è in grado di fornire informazioni
relative ai file e ai processi per i
quali non si dispongono di diritti
sufficienti, per cui è necessario, se
possibile, eseguirlo come utente
root.