Prozessbeendigung

Normalerweise verwenden Sie den Befehl kill, um einen Prozess zu beenden.

Der Befehl kill sendet ein Signal an den angegebenen Prozess. Je nach Typ des Signals und Charakter des Programms, das in dem Prozess ausgeführt wird, wird der Prozess entweder beendet, oder er bleibt aktiv. Die folgenden Signale werden gesendet:

Element Beschreibung
SIGTERM (Signal 15) ist eine Beendigungsanforderung an das Programm. Wenn das Programm eine Signalroutine für SIGTERM hat, die die Anwendung nicht wirklich beendet, hat dieser Befehl kill möglicherweise keine Wirkung. Dies ist das Standardsignal, das von kill gesendet wird.
SIGKILL (Signal 9) ist eine Anweisung, den Prozess unverzüglich zu beenden. Dieses Signal kann nicht abgefangen oder ignoriert werden.
Gewöhnlich ist das Signal SIGTERM dem Signal SIGKILL vorzuziehen. Wenn das Programm eine Routine für SIGTERM hat, kann diese den Prozess ordnungsgemäß bereinigen und beenden. Typ:
kill -term ProcessID
(-term kann weggelassen werden.) Wenn der Prozess nicht auf das Signal SIGTERM reagiert, geben Sie Folgendes ein:
kill -kill ProcessID
Möglicherweise finden Sie in Ihrer Prozesstabelle gelegentlich nicht mehr aktive Prozesse, auch Geisterprozesse genannt. Diese Prozesse werden nicht mehr ausgeführt, haben keinen zugeordneten Systemspeicherbereich, behalten aber weiterhin ihre PID. Sie erkennen einen Geisterprozess in der Prozesstabelle daran, dass in der Spalte CMD für diesen Prozess der Wert <defunct> ausgewiesen wird. Beispiel:
 UID   PID  PPID   C    STIME    TTY  TIME CMD
                             .
                             .
                             .
 lee 22392 20682   0   Jul 10      -  0:05 xclock
 lee 22536 21188   0   Jul 10  pts/0  0:00 /bin/ksh
 lee 22918 24334   0   Jul 10  pts/1  0:00 /bin/ksh
 lee 23526 22536  22                  0:00 <defunct>
 lee 24334 20682   0   Jul 10      ?  0:00 aixterm
 lee 24700     1   0   Jul 16      ?  0:00 aixterm
root 25394 26792   2   Jul 16  pts/2  0:00 ksh
 lee 26070 24700   0   Jul 16  pts/3  0:00 /bin/ksh
 lee 26792 20082   0   Jul 10  pts/2  0:00 /bin/ksh
root 27024 25394   2 17:10:44  pts/2  0:00 ps -ef
Geisterprozesse existieren so lange, bis der zugehörige Elternprozess beendet oder ein Systemabschluss durchgeführt und das System erneut gestartet wird. Im vorherigen Beispiel ist der übergeordnete Prozess (PPID) der Befehl ksh. Wenn die Korn-Shell beendet wird, wird der "gestorbene" Prozess aus der Prozesstabelle entfernt.

Manchmal sammelt sich eine Reihe solcher Prozesse in der Prozesstabelle an, wenn eine Anwendung mehrere untergeordnete Prozesse erzeugt hat und nicht beendet wurde. Wenn dies ein Problem wird, besteht die einfachste Lösung darin, die Anwendung so zu ändern, dass ihre Subroutine sigaction das Signal SIGCHLD ignoriert.