Comment savoir quel processus empêche un démontage?

26

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 savoir quel processus empêche le démontage?

Guillaume Coté
la source
3
Je pense que vous avez une faute de frappe ici, je doute que la commande ait renvoyé "Comment puis-je savoir quel processus consomme ma bande passante?" ...;) toute chance que vous puissiez modifier la question s'il vous plaît?
8128

Réponses:

24

ouvrir un terminal:

fuser -c /media/KINGSTON

Il produira quelque chose comme ceci:

/media/KINGSTON/: 3106c 11086

Cela vous donnera le pid des processus utilisant ce volume. Le caractère supplémentaire à la fin du pid donnera quelques informations supplémentaires. (c dans 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 fichier ouvert
r - le fichier est le répertoire racine du processus
t - le processus accède à la 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 ces pids et de réessayer le démontage

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 vous aidera

aneeshep
la source
2
fuser -ck le tuerait également.
João Pinto
3
Je suggérerais de les tuer sans l'option -9 d'abord, pour donner à ces applications la possibilité de s'arrêter proprement. Et je suggère d'utiliser ps <pid>au lieu de modifier des fichiers dans / proc pour voir le nom de la commande et les arguments.
Marius Gedminas
Je suis votre procédure pour trouver le processus, c'est Thunar - démon. Il n'y a pas de caractère supplémentaire donnant des informations supplémentaires. Je ne l'ai pas encore tué, je m'inquiète de l'impact que cela pourrait avoir sur autre chose en cours d'exécution.
Guillaume Coté
7

L'outil le plus utile est lsof Installer lsof . Il montre quels fichiers sont utilisés par quels processus. S'il /media/KINGSTONs'agit d'un point de montage (le nom du périphérique fonctionnerait également), la commande suivante affiche tous les fichiers utilisés sur ce point de montage:

lsof /media/KINGSTON

Si vous exécutez cette commande en tant qu'utilisateur ordinaire, elle n'affichera que vos propres processus¹. Exécutez sudo lsof /media/KINGSTONpour voir tous les processus des utilisateurs.

La sortie de lsofressemble à ceci:

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 COMMANDcolonne affiche le nom de l'exécutable du programme et la PIDcolonne indique l'ID du processus. La NAMEcolonne affiche le nom du fichier; vous pouvez voir (deleted)si le fichier a été supprimé lors de son 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). USERdevrait être explicite. Les autres colonnes n'ont pas d'importance ici, sauf peut FD- être , qui montre comment le fichier est utilisé par le processus:

  • cwd: répertoire de travail actuel
  • txt: l'exécutable du programme²
  • mem: un fichier mappé en mémoire (ici, pensez-y comme un fichier ouvert)
  • un nombre: un véritable fichier ouvert; une lettre suivante indique le mode d'ouverture, comme rpour la lecture et l' wécriture

Il n'y a aucun moyen mécanique de localiser la fenêtre où un fichier est ouvert (ce n'est en fait pas significatif techniquement: si un processus a plusieurs fenêtres, un fichier n'est pas particulièrement associé à une fenêtre ou une autre), ni même une manière simple d'identifier la fenêtre d'un processus (et bien sûr un processus n'a pas besoin d'avoir de fenêtres). Mais généralement, le nom de la commande et le nom du fichier suffisent pour localiser le contrevenant et fermer correctement le fichier.

Si vous ne pouvez pas fermer le fichier et que vous voulez tout mettre fin, vous pouvez tuer le processus avec kill 31421(où 31421est l'ID du processus) ou kill -HUP 31421(«raccrocher»). Si le meurtre ordinaire ne fait pas l'affaire, tuer avec préjudice extrême: kill -KILL 31421.

Il existe une interface graphique pour lsof, glsof , mais elle n'est pas encore tout à fait prête pour les heures de grande écoute, et n'est pas encore packagée pour Ubuntu.

¹ Lsof peut répertorier certaines 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.

Gilles 'SO- arrête d'être méchant'
la source
2

Cela peut également aider:

lsof | grep \/media\/KINGSTON
Hashem Masoud
la source
4
Il n'est pas nécessaire d'échapper aux barres obliques.
Marius Gedminas
Lorsque vous n'êtes pas sûr, appliquez des guillemets, par exemplegrep "media/KINGSTON"
Adam Matan
2

Pendant ce temps, la commande de l'unité de fusion s'est beaucoup améliorée. Vous pouvez effectuer le travail complet avec une seule commande:

$ sudo fuser -ickv /"mountpoint"

Où:

  • paramètre ktue le processus incriminé,
  • tandis que des vspectacles à l' avance le processus et son utilisateur
  • et ivous demande une confirmation.

Si un processus résiste, essayez à nouveau avec fuser -ickv -9(ou plus généralement avec -SIGNAL) qui tue les plus tenaces.
Mais vous trouverez toujours un processus "immortel" ...!

Dans ce cas, j'ai récemment appris à utiliser

$ sudo umount --lazy --force <mountpoint>

comme une dernière ressource, qui jusqu'à présent a fonctionné pour moi à chaque fois.

prometheos
la source
J'ai trouvé le processus immortel, ma tentative infructueuse d'utilisation vboxmanage. -_-
sudo