Das kill-Kommando ist einer der zentralen Unix-Befehle. Er sendet Signale an Prozesse (laufende Programme,etc.) . Diese können unterschiedlich auf Signale reagieren. Das Standard Signal ist 15 (SIGTERM). Normalerweise beendet man Programme und Server natürlich sauber z.B. via InitSkripte oder bei grafischen Programmen über das Menü. Das Killen via kill ist etwas für Notfälle, oder wenn ein Prozess keine anderen Beendigungsmethoden anbietet bzw. auf andere Methoden nicht mehr reagiert.
Ein Signal welches von den Prozessen nicht abfangbar ist und deshalb fast immer zur Beendigung derselben führt, ist Signalnummer 9 (SIGKILL). (z.B. kill -KILL 25442). Auch sehr häufig ist SIGHUP (HUP= hang up), es wird meistens dazu verwendet einem Prozess zu sagen, dass er seine Konfiguration neu laden und seine Logdateien neu öffnen soll.
Woher erfährt man nun die Prozess-ID (PID) eines Prozesses? Am besten mit dem ps-Kommando. Also z.B.:
ps ax
Dies gibt alle laufenden Prozesse aus. Da diese Ausgaben sehr lang sein können verwendet man häufig eine Pipe und filtert die Ausgabe mit grep. So bewirkt:
ps ax |grep exim
Das lediglich alle Prozesse die "exim" enthalten angezeigt werden.
Die Verwendung der Signalnummern (=Signale) ist nicht besonders standardisiert. Bei Squid kann mit einem Signal z.B. das Rotieren der Logfiles forciert werden.
kill gibt es als Bash-Builtin oder als eigenständiges Kommando (/bin/kill). Beide sind nahezu gleich. In der Bash wird natürlich automatisch das Bash-Builtin verwendet.
Häufig verwendete Signale sind
1 HUP (hang up) 2 INT (interrupt) 3 QUIT (quit) 6 ABRT (abort) 9 KILL (non-catchable, non-ignorable kill) 14 ALRM (alarm clock) 15 TERM (software termination signal)
Eine Liste der verfügbaren Signale erhält man mit kill -l. Dabei zeigt das Bash-Builtin gegenüber dem eigenständigen Kommando eine wesentlich größere Menge Signale an - inklusive der zugehörigen Signalnummern.
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
Tipps & Tricks
wer Shellskripterfahrung hat, kann mit trap im Shellskript einstellen, auf welche Signale wie reagiert werden soll
es gibt natürlich noch die bequemen killall und pkill Kommandos. Diese können diverse Eigenschaften zum Auffinden der zu beendenden Prozesse nutzen (Programmname, User-Id, Gruppen-Id, ...).
Manuals
- man kill