Функция 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,
которая создает контекст, отменяемый при получении сигнала