Sobes.tech
Back to questions
Senior
6

Какие сигналы ОС можно перехватить, а какие нет?

Companies where asked
Гос крипта

Answer from AI

sobes.tech AI

В операционных системах Unix-подобного типа (Linux, macOS) сигналы можно разделить на перехватываемые и неперехватываемые.

Перехватываемые сигналы — это те, для которых процесс может установить обработчик (signal handler). Например:

  • SIGINT (прерывание, обычно Ctrl+C)
  • SIGTERM (запрос на завершение)
  • SIGHUP (перезагрузка терминала)
  • SIGUSR1, SIGUSR2 (пользовательские сигналы)

Неперехватываемые сигналы — это сигналы, которые нельзя перехватить или игнорировать, так как они предназначены для немедленного завершения процесса или критических ситуаций:

  • SIGKILL (немедленное завершение процесса)
  • SIGSTOP (приостановка процесса)

Пример на Go для перехвата SIGINT:

import (
    "os"
    "os/signal"
    "syscall"
    "fmt"
)

func main() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        sig := <-sigs
        fmt.Println("Получен сигнал:", sig)
        // обработка сигнала
        os.Exit(0)
    }()

    select {} // ожидание сигнала
}

Таким образом, можно перехватывать большинство сигналов, кроме SIGKILL и SIGSTOP, которые ОС обрабатывает принудительно.