РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1447 of 1593 menu

Функция signal.Notify

Функция signal.Notify позволяет программе получать уведомления о поступлении системных сигналов. В первый параметр она принимает канал, в который будут отправляться полученные сигналы, а во второй параметр принимает один или несколько сигналов, которые необходимо перехватывать. Если второй параметр не указан, функция перехватывает все сигналы, которые не приводят к завершению программы.

Синтаксис

signal.Notify(c, sigs...)

Пример sect

Давайте создадим программу, которая перехватывает сигнал SIGINT (генерируется при нажатии Ctrl+C):

package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT) fmt.Println("Waiting for SIGINT (Ctrl+C)...") sig := <-sigCh fmt.Printf("Received signal: %s\n", sig) }

Результат выполнения кода (при нажатии Ctrl+C):

"Waiting for SIGINT (Ctrl+C)..." "Received signal: interrupt"

Пример sect

Давайте перехватим несколько сигналов одновременно:

package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) fmt.Println("Waiting for SIGINT or SIGTERM...") sig := <-sigCh fmt.Printf("Received signal: %s\n", sig) }

Результат выполнения кода (при отправке SIGTERM):

"Waiting for SIGINT or SIGTERM..." "Received signal: terminated"

Пример sect

Давайте создадим программу, которая корректно завершает работу при получении сигнала:

package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) fmt.Println("Program is running. Press Ctrl+C to stop.") go func() { <-sigCh fmt.Println("\nShutting down gracefully...") os.Exit(0) }() // Бесконечный цикл для имитации работы select {} }

Результат выполнения кода (при нажатии Ctrl+C):

"Program is running. Press Ctrl+C to stop." "\nShutting down gracefully..."

Смотрите также

  • функцию signal.Stop,
    которая останавливает перехват сигналов для канала
  • функцию signal.Ignore,
    которая игнорирует указанные сигналы
  • функцию signal.Reset,
    которая сбрасывает обработку сигналов к стандартному поведению
  • функцию signal.NotifyContext,
    которая создает контекст, отменяемый при получении сигнала
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить