2016-11-08 9 views
3

В настоящее время я пытаюсь реализовать функцию, которая будет вызывать сигнал прерывания в Google Go. Я знаю, как перехватывать сигналы прерываний с консоли, используя signal.Notify(interruptChannel, os.Interrupt), однако я не могу найти способ фактически отправлять сигналы прерывания. Я обнаружил, что вы can send a signal to a process, но я не уверен, что это можно использовать для отправки сигнала прерывания верхнего уровня.Как отправить сигнал прерывания в golang?

Есть ли способ отправить сигнал прерывания из функции golang, которая может быть захвачена любым, что слушает сигналы системного прерывания, или это то, что не поддерживается в golang?

+0

Что вы подразумеваете под «сигналом прерывания верхнего уровня»? SIGINT - это как любой другой сигнал. – JimB

ответ

6

Получите этот процесс, используя FindProcess, StartProcess или другими способами. Вызов Signal отправить прерывание:

err := p.Signal(os.Interrupt) 

Это будет посылать сигнал на целевой процесс (если предположить, что вызывающий процесс имеет разрешение на это) и ссылаться на то, что сигнал обработчики целевой процесс может иметь для SIGINT.

3

Предполагая, что вы используете что-то вроде этого для захвата сигнала прерывания

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 

 Смежные вопросы

  • Нет связанных вопросов^_^