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

Функция signal.Stop

Функция signal.Stop отменяет ранее установленную обработку сигналов для переданного ей канала. Она принимает один параметр - канал типа chan<- os.Signal, который был ранее передан в функцию signal.Notify. После вызова signal.Stop, сигналы перестают поступать в этот канал. Если в канале уже есть ожидающие сигналы, они остаются в буфере, но новые сигналы больше не будут отправляться.

Синтаксис

signal.Stop(c chan<- os.Signal)

Где c - канал для приема сигналов.

Пример

Давайте создадим канал для приема сигналов и зарегистрируем обработку сигнала os.Interrupt:

package main import ( "fmt" "os" "os/signal" "time" ) func main() { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt) go func() { <-sigChan fmt.Println("received interrupt") }() time.Sleep(2 * time.Second) fmt.Println("stopping signal notification") signal.Stop(sigChan) time.Sleep(2 * time.Second) fmt.Println("program finished") }

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

"stopping signal notification" "program finished"

В этом примере обработка сигнала была остановлена до того, как сигнал был отправлен, поэтому сообщение "received interrupt" не было выведено.

Пример

Используем signal.Stop для остановки обработки сигнала syscall.SIGTERM:

package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGTERM) go func() { sig := <-sigChan fmt.Printf("received signal: %s\n", sig) }() fmt.Println("sending SIGTERM") process, _ := os.FindProcess(os.Getpid()) _ = process.Signal(syscall.SIGTERM) time.Sleep(100 * time.Millisecond) fmt.Println("stopping signal notification") signal.Stop(sigChan) fmt.Println("sending SIGTERM again") _ = process.Signal(syscall.SIGTERM) time.Sleep(100 * time.Millisecond) fmt.Println("program finished") }

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

"sending SIGTERM" "received signal: terminated" "stopping signal notification" "sending SIGTERM again" "program finished"

Первый сигнал SIGTERM был обработан, так как обработка была активна. После вызова signal.Stop второй сигнал не был доставлен в канал.

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

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