2 回答

TA貢獻1850條經驗 獲得超11個贊
這與 Go 沒有任何關系。您從終端外殼啟動進程 A。進程 A 啟動進程 D(不確定 B 發生了什么,但沒關系)。進程 D 殺死進程 A?,F在你的 shell 看到它啟動的進程已經退出,所以 shell 準備聽另一個命令。進程 D 啟動進程 A 的另一個副本,但外殼對此一無所知。當您鍵入 ^C 時,shell 將處理它。如果你運行另一個程序,shell 會安排 ^C 去那個程序。shell 對進程 A 的副本一無所知,因此它永遠不會將 ^C 指向該進程。

TA貢獻1895條經驗 獲得超7個贊
您可以查看兩個 http 服務器框架采用的方法來偵聽和攔截信號(包括SIGINT,甚至SIGTERM)
kornel661/nserv,其中ZeroDowntime-example/server.go使用通道:
// catch signals:
signals := make(chan os.Signal)
signal.Notify(signals, os.Interrupt, os.Kill)
zenazn/goji,其中graceful/signal.go使用類似的方法:
var stdSignals = []os.Signal{syscall.SIGINT, syscall.SIGTERM}
var sigchan = make(chan os.Signal, 1)
func init() {
go waitForSignal()
}
- 2 回答
- 0 關注
- 223 瀏覽
添加回答
舉報