Как отправить сигнал прерывания в golang?
в настоящее время я пытаюсь реализовать функцию, которая вызовет сигнал прерывания в Google Go. Я знаю, как перехватывать сигналы прерывания с консоли, используя signal.Notify(interruptChannel, os.Interrupt)
, однако, я не могу найти способ посылать сигналы прерываний вокруг. Я обнаружил, что вы может отправить сигнал процессу, но я не уверен, что это можно использовать для отправки сигнала прерывания верхнего уровня.
есть ли способ отправить сигнал прерывания из функции golang, которая может быть захвачено чем-либо, что прослушивает сигналы прерывания системы, или это что-то, что не поддерживается в golang?
2 ответов
получить процесс с помощью FindProcess, StartProcess или каким-то другим способом. Звоните сигнал для отправки прерывания:
err := p.Signal(os.Interrupt)
Это отправит сигнал целевому процессу (предполагая, что вызывающий процесс имеет разрешение на это) и вызовет любые обработчики сигналов, которые целевой процесс может иметь для SIGINT.
предполагая, что вы используете что-то вроде этого для захвата прерывания сигнала
var stopChan = make(chan os.Signal, 2)
signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
<-stopChan // wait for SIGINT
используйте ниже в любом месте вашего кода, чтобы отправить сигнал прерывания выше части ожидания.
syscall.Kill(syscall.Getpid(), syscall.SIGINT)
или если вы находитесь в том же пакете, где определена переменная stopChan. Таким образом, сделать его доступным. Ты можешь это сделать.
stopChan <- syscall.SIGINT
или вы можете определить stopChan как глобальную переменную (делая первую букву в заглавной букве достигнете того же), тогда вы можете отправьте сигнал прерывания из другого пакета.
Stopchan <- syscall.SIGINT