Ответ
kill -15 (SIGTERM) — это "вежливый" сигнал завершения. Он просит программу корректно завершиться, освобождая ресурсы. Приложение может перехватить его и выполнить cleanup.
kill -9 (SIGKILL) — это принудительное убийство процесса. Ядро Linux немедленно останавливает процесс без возможности обработки сигнала. Это может привести к утечкам ресурсов.
Пример:
// Программа может перехватить SIGTERM
func main() {
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGTERM)
go func() {
<-sigChan
fmt.Println("Cleaning up...")
os.Exit(0)
}()
// ...
}
SIGKILL перехватить нельзя. Всегда предпочтительнее сначала использовать SIGTERM.