Wie finde ich heraus, welcher Prozess ein Umount verhindert?

26

Wenn ich es tue

sudo umount /media/KINGSTON

ich habe

umount: /media/KINGSTON: device is busy.

Ich schließe alle Fenster und stelle sicher, dass alle Shell auf andere Verzeichnisse zeigen. Wie kann ich herausfinden, welcher Prozess das Umount verhindert?

Guillaume Coté
quelle
3
Ich glaube, Sie haben hier einen Tippfehler. Ich bezweifle, dass der Befehl "Wie finde ich heraus, welcher Prozess meine Bandbreite verschlingt?" Zurückgegeben wurde.
8128

Antworten:

24

Öffnen Sie ein Terminal:

fuser -c /media/KINGSTON

Es wird so etwas ausgegeben:

/media/KINGSTON/: 3106c 11086

Dadurch erhalten Sie die PID der Prozesse, die dieses Volume verwenden. Das zusätzliche Zeichen am Ende von pid gibt zusätzliche Informationen. (c in 3106c)

c - Der Prozess verwendet die Datei als aktuelles Arbeitsverzeichnis.
m - Die Datei wird mit mmap zugeordnet.
o - Der Prozess verwendet sie als offene Datei.
r - Die Datei ist das Stammverzeichnis des Prozesses.
t - Der Prozess greift auf die Datei zu Datei als Textdatei
y - Diese Datei ist das steuernde Terminal für den Prozess

Zum Abmelden töte einfach diese Pids und versuche es erneut

sudo kill -9 3106 11086
sudo umount /media/KINGSTON

Hinweis: Um den genauen Anwendungsnamen dieser Pids zu ermitteln, können Sie diesen Befehl verwenden

cat /proc/<pid>/cmdline

Beispielsweise : cat /proc/11086/cmdline

Dies wird so etwas wie unten ausgeben.

    evince^@/media/KINGSTON/Ubuntu-guide.pdf^@

Hoffe das wird helfen

aneeshep
quelle
2
fuser -ck würde es auch töten.
João Pinto
3
Ich würde vorschlagen, sie zuerst ohne die Option -9 zu beenden, damit diese Anwendungen ordnungsgemäß heruntergefahren werden können. Und ich würde vorschlagen, ps <pid>Dateien in / proc zu verwenden, anstatt sie zu bearbeiten, um den Befehlsnamen und die Argumente zu sehen.
Marius Gedminas
Ich folge Ihrer Prozedur, um den Prozess zu finden, es ist Thunardeamon. Es gibt kein zusätzliches Zeichen, das zusätzliche Informationen angibt. Ich habe es noch nicht getötet, ich mache mir Sorgen über die Auswirkungen, die es auf andere Dinge haben könnte.
Guillaume Coté
7

Das nützlichste Werkzeug ist lsof Installieren Sie lsof . Es zeigt, welche Dateien von welchen Prozessen verwendet werden. Wenn /media/KINGSTONes sich um einen Einhängepunkt handelt (der Gerätename würde auch funktionieren), zeigt der folgende Befehl alle Dateien an, die auf diesem Einhängepunkt verwendet werden:

lsof /media/KINGSTON

Wenn Sie diesen Befehl als normaler Benutzer ausführen, werden nur Ihre eigenen Prozesse angezeigt¹. Führen Sie sudo lsof /media/KINGSTONden Befehl aus , um alle Benutzerprozesse anzuzeigen.

Die Ausgabe von lsofsieht folgendermaßen aus:

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

In der COMMANDSpalte wird der Name der ausführbaren Programmdatei und in der PIDSpalte die Prozess-ID angezeigt. Die NAMESpalte zeigt den Dateinamen. Möglicherweise wird angezeigt, (deleted)ob die Datei beim Öffnen gelöscht wurde (wenn eine Datei gelöscht wird, hat sie keinen Namen mehr, ist aber noch vorhanden, bis der letzte Prozess, der sie verwendet, die Datei schließt). USERsollte selbsterklärend sein. Die anderen Spalten spielen hier keine Rolle, außer vielleicht FD, was zeigt, wie die Datei vom Prozess verwendet wird:

  • cwd: aktuelles Arbeitsverzeichnis
  • txt: das ausführbare Programm²
  • mem: eine Datei mit Speicherzuordnung (hier als offene Datei betrachten)
  • eine Zahl: eine tatsächlich geöffnete Datei; Ein nachfolgender Buchstabe gibt den Öffnungsmodus an, z. B. rzum Lesen und wzum Schreiben

Es gibt keine mechanische Möglichkeit, das Fenster zu lokalisieren, in dem eine Datei geöffnet ist (dies ist in der Tat technisch nicht sinnvoll: Wenn ein Prozess mehrere Fenster hat, ist eine Datei nicht besonders mit dem einen oder anderen Fenster verknüpft), und es gibt auch keine einfache Möglichkeit, eine Datei zu identifizieren Das Fenster eines Prozesses (und natürlich muss ein Prozess keine Fenster haben). In der Regel reichen jedoch der Befehlsname und der Dateiname aus, um den Täter zu lokalisieren und die Datei ordnungsgemäß zu schließen.

Wenn Sie die Datei nicht schließen können und nur alles beenden möchten, können Sie den Prozess mit kill 31421(wo 31421ist die Prozess-ID) oder kill -HUP 31421("auflegen") beenden . Wenn Ebene Tötung der Trick nicht tun, töten mit extremem Vorurteil: kill -KILL 31421.

Es gibt eine GUI für lsof, glsof , aber es ist noch nicht ganz fertig für die Hauptsendezeit und noch nicht für Ubuntu gepackt .

¹ Lsof kann einige Informationen zu den Prozessen anderer Benutzer auflisten, erkennt den Einhängepunkt jedoch nicht und listet sie daher nicht auf, wenn Sie einen Einhängepunkt angeben.
² Ausführbarer Code wird in Diskussionen über ausführbare Formate häufig als Text bezeichnet.

Gilles 'SO - hör auf böse zu sein'
quelle
2

Auch das kann helfen:

lsof | grep \/media\/KINGSTON
Hashem Masoud
quelle
4
Es ist nicht nötig, den Schrägstrichen zu entkommen.
Marius Gedminas
Wenn Sie sich nicht sicher sind, greifen Sie zu Anführungszeichen, z. B.grep "media/KINGSTON"
Adam Matan
2

Inzwischen hat sich der Befehl fuser stark verbessert. Sie können den gesamten Job mit einem einzigen Befehl ausführen:

$ sudo fuser -ickv /"mountpoint"

Woher:

  • Parameter kbricht den beleidigenden Prozess ab,
  • while vzeigt den Prozess und seinen Benutzer im Voraus an
  • und ibittet Sie um Bestätigung.

Wenn sich ein Prozess widersetzt, versuchen Sie es erneut mit fuser -ickv -9(oder allgemeiner mit -SIGNAL), der die hartnäckigsten tötet.
Aber Sie werden immer einen "unsterblichen" Prozess finden ...!

In diesen Fällen habe ich kürzlich gelernt, zu verwenden

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

als letzte ressource hat das bisher jedes mal bei mir geklappt.

prometheos
quelle
Ich fand den unsterblichen Prozess, meinen gescheiterten Versuch zu nutzen vboxmanage. -_-
sudo