SIGTERM (od signal terminate) to standardowy sygnał Uniksa o numerze 15, którym jeden proces prosi drugi o uprzejme zakończenie pracy. Słowo „prosi” jest tu kluczowe: SIGTERM to nie rozkaz, tylko grzeczne pukanie do drzwi. Proces dostaje szansę, żeby dokończyć to, co robi, posprzątać po sobie i wyjść z czystym sumieniem. To domyślny sygnał, który wysyła komenda kill, gdy nie podasz jej żadnego numeru.
Działa to tak: gdy proces dostaje SIGTERM, może mieć zarejestrowaną własną procedurę obsługi (tzw. signal handler). W niej programista wpisuje, co ma się stać przed śmiercią: zamknięcie otwartych plików, zapisanie stanu, zwolnienie blokad w bazie, dokończenie aktualnego requestu HTTP, odłączenie od kolejki. Dopiero potem proces sam się kończy. Jeśli program nie ma handlera, jądro wykonuje akcję domyślną, czyli po prostu go ubija. SIGTERM da się przechwycić, zignorować albo zablokować, i właśnie dlatego nadaje się do kontrolowanego zamykania usług.
Najczęściej spotkasz go przy zatrzymywaniu serwisów. Gdy robisz systemctl stop nginx, systemd najpierw wysyła do procesu właśnie SIGTERM i czeka (domyślnie ok. 90 sekund, parametr TimeoutStopSec). Jeśli proces nie wyjdzie na czas, dopiero wtedy leci SIGKILL. Podobnie Docker: docker stop wysyła SIGTERM, odlicza 10 sekund grace period, a potem zabija kontener na twardo. Ręcznie wyślesz go tak:
kill 1234— SIGTERM do procesu o PID 1234 (numer 15 jest domyślny)kill -15 1234albokill -TERM 1234— to samo, jawniepkill -TERM nginx— do wszystkich procesów po nazwie
Na co uważać. Najczęstszy mit to przekonanie, że kill zawsze „zabija” natychmiast — nie, domyślnie tylko prosi i czeka. Drugi błąd: skoro proces ignoruje SIGTERM, to walisz od razu kill -9 (SIGKILL). To droga na skróty, która nie daje aplikacji posprzątać i grozi porzuconymi blokadami albo niezapisanymi danymi. SIGKILL traktuj jak ostateczność, gdy SIGTERM faktycznie nie zadziałał. Pamiętaj też, że PID 1 w kontenerze (twój proces główny) musi sam obsłużyć SIGTERM — inaczej Docker będzie czekał te swoje sekundy i tak czy siak go ubije. To częsta przyczyna „dlaczego mój kontener tak wolno się zatrzymuje”.
Pojęcia powiązane: SIGKILL (sygnał 9, nieprzechwytywalny), SIGINT (sygnał 2, wysyłany przez Ctrl+C), SIGHUP, signal handler, graceful shutdown, polecenia kill, pkill i killall, oraz trap w skryptach bashowych.