В чём разница между kill-15 и kill-9 в Linux

«В чём разница между kill-15 и kill-9 в Linux» — вопрос из категории Linux, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.