Как отправить сигнал прерывания в 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