2016-11-08 4 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