Verschiedene Befehle werden verwendet, um Signale an Prozesse zu senden, um sie zu beenden oder zu „beenden“. Dies ist erforderlich, wenn ein Prozess nicht mehr reagiert (hängt), Systeminstabilität verursacht oder die Kontrolle über eine Datei, die Sie ändern möchten, nicht aufgibt.
Verwenden der PID-Nummer zum Beenden von Prozessen
Sie können den Befehl kill mit der Prozesstabelle verwenden, um Prozesse zu beenden. Durch die Eingabe von kill gefolgt von der PID können Sie bestimmte Prozesse beenden. Die Prozesstabelle kann jedoch Prozesse anzeigen, die Ihnen nicht gehören. Als Benutzer können Sie den Kill-Befehl nur mit Prozessen verwenden, die Ihnen gehören. Als Root können Sie jeden Prozess beenden.
Kill-Signale
Es gibt viele Möglichkeiten, einen Prozess zu beenden, von denen jede einem Signal zugeordnet ist. Dieses Signal bestimmt, wie der Prozess beendet wird. Einige Signale sind in bestimmten Situationen geeigneter als andere. Beispielsweise möchten Sie möglicherweise einen Prozess ordnungsgemäß beenden und ihm Zeit geben, letzte Aktivitäten zu bereinigen. Einige Prozesse ignorieren dieses Signal jedoch oder werden einfach nicht in angemessener Zeit beendet. Dafür müssen Sie möglicherweise ein aggressiveres Signal ausgeben.
Es gibt viele verschiedene Kill-Signale. Jedes Signal hat einen Namen und einen oder mehrere entsprechende Zahlenwerte; Sie können beide mit dem Kill-Befehl verwenden. Einige der häufigsten Signale werden im Folgenden beschrieben:
1. SIGINT (2)
– Unterbricht den Prozess vom Terminal.
– Kann abgefangen oder ignoriert werden.
– Dasselbe wie das Drücken von Strg+C
2. SIGKILL (9)
– Tötet den Prozess sofort.
– Kann nicht gefangen oder ignoriert werden.
– Letzter Ausweg.
3. SIGTERM (15)
– Beendet den Prozess.
– Kann abgefangen oder ignoriert werden.
– Vom Programm und nicht vom Terminal gesendet.
4. SIGSTOP (17, 19, 23)
– Vorgang anhalten.
– Kann nicht abgefangen oder ignoriert werden.
– Vom Programm und nicht vom Terminal gesendet.
5. SIGSTP (18, 20, 24)
– Hält den Prozess vom Terminal aus an.
– Kann abgefangen oder ignoriert werden.
– Gleich wie das Drücken von Strg+Z.
Demo von Tötungssignalen
Im Folgenden finden Sie einige Beispiele für die Implementierung von Kill-Signalen. So beenden Sie einen Prozess mit der ID 921 ordnungsgemäß:
$ kill 15 921
Andernfalls den Prozess sofort beenden:
$ kill 9 921
Alternativ können Sie den Prozess auch anhalten, anstatt ihn vollständig zu entfernen:
$ kill 17 921
Kill-Befehlsbeispiele
1. Um die Signalliste zu erhalten:
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31) SIGUSR2
2. Um ein bestimmtes Signal zu senden:
# kill -s 9
3. So geben Sie die Liste der Prozesse zum Beenden an:
# kill 1234 2345 3456
4. Beenden Sie ein Programm mit dem Standardsignal SIGTERM (Beenden):
# kill process_id
5. Beenden Sie einen Hintergrundjob:
# kill %job_id
6. Beenden Sie ein Programm mit dem Signal SIGHUP (Auflegen). Viele Daemons laden neu, anstatt sich zu beenden:
# kill -1|HUP process_id
7. Beende ein Programm unter Verwendung des Signals SIGINT (Unterbrechung). Dies wird normalerweise dadurch initiiert, dass der Benutzer `Strg + C` drückt:
# kill -2|INT process_id
8. Signalisieren Sie dem Betriebssystem, ein Programm sofort zu beenden (das keine Chance hat, das Signal zu erfassen):
# kill -9|KILL process_id
9. Signalisieren Sie dem Betriebssystem, ein Programm anzuhalten, bis ein SIGCONT-Signal ("Fortfahren") empfangen wird:
# kill -17|STOP process_id
10. Senden Sie ein `SIGUSR1`-Signal an alle Prozesse mit der angegebenen GID (Gruppen-ID):
# kill -SIGUSR1 -group_id