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

Функция signal.Ignore

Функция signal.Ignore указывает программе игнорировать переданные ей системные сигналы. Первый параметр функции принимает один или несколько сигналов типа os.Signal, которые необходимо игнорировать. После вызова этой функции программа перестает реагировать на указанные сигналы, и они не обрабатываются обработчиками.

Синтаксис

signal.Ignore(sig ...os.Signal)

Пример

Давайте заставим программу игнорировать сигнал os.Interrupt (обычно отправляется при нажатии Ctrl+C):

package main import ( "fmt" "os" "os/signal" "time" ) func main() { signal.Ignore(os.Interrupt) fmt.Println("Program started, ignoring Ctrl+C") for { fmt.Println("Working...") time.Sleep(2 * time.Second) } }

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

"Program started, ignoring Ctrl+C" "Working..." "Working..." "Working..."

Теперь при нажатии Ctrl+C программа продолжит работу, не завершаясь.

Пример

Давайте проигнорируем несколько сигналов: os.Interrupt и syscall.SIGTERM:

package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { signal.Ignore(os.Interrupt, syscall.SIGTERM) fmt.Println("Program started, ignoring SIGINT and SIGTERM") for { fmt.Println("Running...") time.Sleep(2 * time.Second) } }

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

"Program started, ignoring SIGINT and SIGTERM" "Running..." "Running..." "Running..."

Теперь программа игнорирует как сигнал прерывания (Ctrl+C), так и сигнал завершения.

Пример

Давайте проверим, что произойдет, если игнорировать сигналы, уже перехватываемые каналом:

package main import ( "fmt" "os" "os/signal" "time" ) func main() { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt) signal.Ignore(os.Interrupt) fmt.Println("Program started, signal is ignored") select { case <-sigChan: fmt.Println("Signal received") case <-time.After(5 * time.Second): fmt.Println("No signal received") } }

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

"Program started, signal is ignored" "No signal received"

Как видно из примера, после вызова signal.Ignore даже если сигнал ранее был настроен через signal.Notify, он перестает доставляться в канал.

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

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