Quand je fais
Sudo umount /media/Kingston
J'ai eu
umount: /media/Kingston: device is busy.
Je ferme toutes les fenêtres et m'assure que tous les Shell pointent vers d'autres répertoires. Comment puis-je trouver quel processus empêche l'umount?
ouvrir un terminal:
fuser -c /media/Kingston
Il va sortir quelque chose comme ça:
/media/Kingston/: 3106c 11086
Cela vous donnera le pid des processus utilisant ce volume. Le caractère supplémentaire à la fin de pid donnera des informations supplémentaires. (c en 3106c)
c - le processus utilise le fichier comme répertoire de travail actuel
m - le fichier est mappé avec mmap
o - le processus l'utilise comme un fichier ouvert
r - le fichier est le répertoire racine du processus
t - le processus accède au fichier en tant que fichier texte
y - ce fichier est le terminal de contrôle du processus
Donc, pour démonter il suffit de tuer ce pids et réessayer le démonter
Sudo kill -9 3106 11086
Sudo umount /media/Kingston
Remarque: pour trouver le nom d'application exact de ces pids, vous pouvez utiliser cette commande
cat /proc/<pid>/cmdline
Par exemple: cat /proc/11086/cmdline
cela produira quelque chose comme ci-dessous.
evince^@/media/Kingston/Ubuntu-guide.pdf^@
J'espère que cela aidera
L’outil le plus utile est lsof . Il montre quels fichiers sont utilisés par quels processus. Si /media/Kingston
est un point de montage (le nom de périphérique fonctionnerait également), la commande suivante affiche tous les fichiers en cours d'utilisation sur ce point de montage:
lsof /media/Kingston
Si vous exécutez cette commande en tant qu'utilisateur ordinaire, elle ne montrera que vos propres processus¹. Exécutez Sudo lsof /media/Kingston
pour voir tous les processus des utilisateurs.
La sortie de lsof
se présente comme suit:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh4 31421 gilles cwd DIR 8,1 4096 130498 /var/tmp
zsh4 31421 gilles txt REG 8,1 550804 821292 /bin/zsh4
zsh4 31421 gilles mem REG 8,1 55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4 31421 gilles 12r REG 8,1 175224 822276 /usr/share/zsh/functions/Completion.zwc
La colonne COMMAND
indique le nom de l'exécutable du programme et la colonne PID
indique l'ID du processus. La colonne NAME
indique le nom du fichier; (deleted)
peut s'afficher si le fichier a été supprimé en cours d'ouverture (lorsqu'un fichier est supprimé, il n'a plus de nom, mais il existe toujours jusqu'à ce que le dernier processus l'utilisant ferme le fichier). USER
devrait être explicite. Les autres colonnes n'ont pas d'importance ici, à l'exception peut-être de FD
name__, qui montre comment le fichier est utilisé par le processus:
cwd
name__: répertoire de travail en courstxt
name__: l'exécutable du programme²mem
name__: un fichier mappé en mémoire (ici, considérez-le comme un fichier ouvert)r
en lecture et w
en écritureIl n’existe aucun moyen mécanique de localiser la fenêtre dans laquelle un fichier est ouvert (ceci n’a en fait pas de sens technique: si un processus a plusieurs fenêtres, un fichier n’est pas particulièrement associé à une fenêtre ou à une autre), ni même un moyen simple d’identifier un fichier. la fenêtre d'un processus (et bien sûr, un processus n'a pas nécessairement de fenêtre). Mais généralement, le nom de la commande et le nom du fichier suffisent à localiser le contrevenant et à fermer le fichier correctement.
Si vous ne pouvez pas fermer le fichier et que vous voulez simplement tout arrêter, vous pouvez tuer le processus avec kill 31421
(où 31421
est l'ID du processus) ou kill -HUP 31421
("raccrocher"). Si le meurtre simple ne fait pas l'affaire, tuez avec un préjudice extrême: kill -KILL 31421
.
Il existe une interface utilisateur graphique pour lsof, glsof , mais elle n'est pas encore prête pour les heures de grande écoute et n'est pas intégrée à Ubuntu pour l'instant.
¹ Lsof peut répertorier des informations sur les processus d'autres utilisateurs, mais il ne détecte pas le point de montage, il ne les répertoriera donc pas si vous spécifiez un point de montage.
² Le code exécutable est souvent appelé texte dans les discussions sur les formats exécutables.
Cela peut aussi aider:
lsof | grep \/media\/Kingston
Pendant ce temps, la commande de fusion s’est beaucoup améliorée. Vous pouvez faire le travail complet avec une seule commande:
$ Sudo fuser -ickv /"mountpoint"
Où:
k
supprime le processus incriminé,v
montre à l’avance le processus et son utilisateuri
vous demande une confirmation.Si certains processus résistent, essayez à nouveau avec fuser -ickv -9
(ou plus généralement avec -SIGNAL
) qui tue les processus les plus obstinés.
Mais vous trouverez toujours un procédé "immortel" ...!
Dans ce cas, j'ai récemment appris à utiliser
$ Sudo umount --lazy --force <mountpoint>
en tant que dernière ressource, cela a jusqu'à présent fonctionné pour moi à chaque fois.