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

Функция signal.Reset

Функция signal.Reset из пакета os/signal позволяет сбросить обработчики для указанных сигналов. Первым параметром функция принимает одно или несколько значений типа os.Signal — сигналы, для которых необходимо удалить все ранее установленные обработчики. Если вызвать функцию без аргументов или передать в качестве аргументов только нулевые значения, то будут сброшены обработчики для всех сигналов, кроме os.Interrupt и os.Kill, так как их поведение по умолчанию нельзя изменить. После вызова signal.Reset для указанных сигналов восстанавливается стандартное поведение, установленное операционной системой.

Синтаксис

signal.Reset(sig ...os.Signal)

Пример

Давайте рассмотрим базовый пример использования функции signal.Reset. Сначала установим обработчик для сигнала os.Interrupt, а затем сбросим его:

package main import ( "fmt" "os" "os/signal" "time" ) func main() { c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c fmt.Println("Получен сигнал interrupt") }() time.Sleep(1 * time.Second) signal.Reset(os.Interrupt) fmt.Println("Обработчик сброшен") }

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

"Обработчик сброшен"

Пример

В этом примере показано, как сбросить обработчики сразу для нескольких сигналов. Мы установим обработчики для os.Interrupt и syscall.SIGTERM, а затем сбросим их обоих с помощью одного вызова:

package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { c := make(chan os.Signal, 2) signal.Notify(c, os.Interrupt, syscall.SIGTERM) go func() { <-c fmt.Println("Получен сигнал") }() // Сбрасываем обработчики для обоих сигналов signal.Reset(os.Interrupt, syscall.SIGTERM) fmt.Println("Обработчики сброшены") }

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

"Обработчики сброшены"

Пример

Если вызвать signal.Reset без аргументов, то будут сброшены все обработчики, установленные для любых сигналов, кроме тех, чьё поведение по умолчанию не может быть изменено (например, os.Kill и os.Interrupt не сбрасываются полностью, а лишь удаляются пользовательские обработчики):

package main import ( "os" "os/signal" "syscall" ) func main() { c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGUSR1, syscall.SIGUSR2) // Сброс всех обработчиков signal.Reset() // Все обработчики удалены }

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

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