Různé příkazy se používají k odesílání signálů procesům k jejich ukončení nebo „zabití“. To je nezbytné, když proces přestane reagovat (zablokuje se), způsobí nestabilitu systému nebo se nepodaří vzdát kontroly nad souborem, který se pokoušíte upravit.
Použití čísla pid k ukončení procesů
K ukončení procesů můžete použít příkaz kill s tabulkou procesů. Zadáním kill následovaného PID můžete ukončit specifické procesy. Tabulka procesů však může zobrazovat procesy, které vám nepatří. Jako uživatel můžete použít příkaz kill pouze s procesy, které vlastníte. Jako root můžete zabít jakýkoli proces.
Kill Signals
Existuje mnoho způsobů, jak zabít proces, každý z nich je namapován na signál. Tento signál určuje, jak proces ukončit. Některé signály jsou v určitých situacích vhodnější než jiné. Můžete si například přát ukončit proces elegantně a dát mu čas na vyčištění všech posledních aktivit. Některé procesy však budou tento signál ignorovat nebo se jednoduše neskončí v přiměřené době. K tomu možná budete muset vydat agresivnější signál.
Existuje mnoho různých zabíjecích signálů. Každý signál má název a jednu nebo více odpovídajících číselných hodnot; můžete použít buď s příkazem kill. Některé z nejběžnějších signálů jsou popsány níže:
1. SIGINT (2)
– Přeruší proces z terminálu.
– Může být zachycen nebo ignorován.
– Stejné jako stisknutí Ctrl+C
2. SIGKILL (9)
– Okamžitě zabije proces.
– Nelze chytit ani ignorovat.
– Poslední možnost.
3. SIGTERM (15)
– Ukončí proces.
– Může být zachycen nebo ignorován.
– Odesláno z programu, nikoli z terminálu.
4. SIGSTOP (17, 19, 23)
– Pozastavení procesu.
– Nelze zachytit ani ignorovat.
– Odesláno z programu, nikoli z terminálu.
5. SIGSTP (18, 20, 24)
– Pozastaví proces z terminálu.
– Může být zachycen nebo ignorován.
– Stejné jako stisknutí Ctrl+Z.
Ukázka signálů zabíjení
Následuje několik příkladů implementace signálů zabíjení. Chcete-li elegantně ukončit proces s ID 921:
$ kill 15 921
Pokud se tak nestane, proces okamžitě ukončíte:
$ kill 9 921
Případně proces pozastavit, než úplně odstranit:
$ kill 17 921
Příklady příkazů kill
1. Chcete-li získat seznam signálů:
# 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. Chcete-li odeslat konkrétní signál:
# kill -s 9
3. Chcete-li zadat seznam procesů pro ukončení:
# kill 1234 2345 3456
4. Ukončete program pomocí výchozího signálu SIGTERM (ukončení):
# kill process_id
5. Ukončete úlohu na pozadí:
# kill %job_id
6. Ukončete program pomocí signálu SIGHUP (zavěsit). Mnoho démonů se místo ukončení znovu načte:
# kill -1|HUP process_id
7. Ukončete program pomocí signálu SIGINT (přerušení). To je obvykle zahájeno stisknutím kláves `Ctrl + C`:
# kill -2|INT process_id
8. Dejte operačnímu systému signál, aby okamžitě ukončil program (který nemá šanci zachytit signál):
# kill -9|KILL process_id
9. Dejte operačnímu systému signál, aby pozastavil program, dokud nebude přijat signál SIGCONT („pokračovat“):
# kill -17|STOP process_id
10. Odešlete signál `SIGUSR1` všem procesům s daným GID (ID skupiny):
# kill -SIGUSR1 -group_id