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