Kurzer Prozess
Zu Befehl: ps, pstree, lsof, kill
Nichts geht mehr
Wenn Prozesse nicht ordentlich beendet werden, kann es schon mal vorkommen, dass eine Anwendung ein Gerät weiterhin belegt, obwohl sie dieses hätte freigeben müssen. An dieser Stelle hilft das Programm lsof ("list open files", zu deutsch: "liste offene Dateien auf") weiter. Bei den meisten Distributionen liegt es unter /usr/sbin/ – starten Sie es mit voller Pfadangabe /usr/sbin/lsof, wenn Ihr Pfad das Verzeichnis nicht enthält. Ohne Angabe weiterer Parameter präsentiert lsof alle offenen Dateien des Systems. Wer sich für diese lange Liste interessiert, leitet die Ausgabe am besten an einen Pager wie more oder less weiter:
huhn@asteroid:~$ /usr/sbin/lsof | less
Gezielter arbeiten Sie mit lsof, wenn Sie den Namen der entsprechenden (Geräte-) Datei angeben. Blockiert beispielsweise ein Prozess das CD-ROM-Laufwerk ("umount: /cdrom: Das Gerät wird momentan noch benutzt"), hilft lsof, den Schuldigen zu finden:
huhn@asteroid:~$ /usr/sbin/lsof | grep cdrom gzip 17614 huhn 3r REG 22,0 35424 58350 /cdrom/INDEX.gz
Dabei wird die Ausgabe des Kommandos lsof an das Programm grep weitergeleitet, welches nach Vorkommen von cdrom sucht. Alternativ können Sie hier auch /usr/sbin/lsof /dev/cdrom verwenden, falls an dieser Stelle das Laufwerk eingehängt ist.
Das Listing zeigt: Offenbar greift hier der Prozess mit der Nummer 17614 auf die Datei /cdrom/INDEX.gz zu. Um dem Schuldigen ausfindig zu machen, kann jetzt wieder das ps-Kommando eingesetzt werden (Listing 2).
Listing 2
Teamarbeit von lsof und ps
huhn@asteroid:~$ /usr/sbin/lsof | grep cdrom gzip 17614 huhn 3r REG 22,0 35424 58350 /cdrom/INDEX.gz huhn@asteroid:~$ ps aux | grep 17614 huhn 17614 0.0 0.6 1608 432 pts/16 S 14:20 0:00 gzip -cdfq /cdrom/INDEX.gz huhn 25150 0.0 0.6 1336 436 pts/15 S 14:21 0:00 grep 17614
Killer-Kommando
Wer sich mit Gewalt von einem Prozess trennen möchte, kann das Kommando kill zu Hilfe nehmen. Dieses "schießt" Prozesse aber nicht einfach nur ab, es kann stattdessen alle möglichen Signale an Prozesse schicken. Mit kill -l ("l" steht für Liste) erhalten Sie eine Übersicht (Abbildung 3).
Nicht all diese Signale sind wichtig und kommen häufig zum Einsatz, es lohnt sich aber, ein paar elementare Funktionen auswendig zu lernen. Wer einen Prozess nicht richtig beenden, sondern einfach nur kurz stoppen möchte, verwendet kill -STOP PID. In der Liste ist dieses Signal unter Punkt 19 SIGSTOP zu finden, es geht daher auch mit der numerischen Signalangabe kill -19 PID. Um den Prozess wiederzubeleben, verwenden Sie das Signal 18, SIGCONT (wie englisch "continue", fortfahren): kill -CONT PID oder kill -18 PID.
Außerdem wichtig sind SIGTERM (15) und SIGKILL (9). Ersteres – auf einen Prozess losgelassen – versucht, diesen noch "ordentlich" zu beenden; kill -9 hingegen "schießt" den Prozess bedingungslos ab und ist nur in Ausnahmefällen zu empfehlen, weil der Prozess hier keine Möglichkeit erhält, etwaige offene Dateien noch zu schließen: Beim Abschuss mit kill -9 droht also Datenverlust.
Neben kill steht Ihnen auch killall zur Verfügung: Dieses Tool benötigt keine Prozess-ID, sondern nimmt den Namen einer Anwendung und schickt Signale an alle Instanzen. Vorsicht ist also geboten: Ein killall bash beendet sämtliche Bash-Shells auf dem Rechner – einschließlich derjenigen, in der Sie das Kommando eingegeben haben.



