2 回答
TA贡献1850条经验 获得超11个赞
这与 Go 没有任何关系。您从终端外壳启动进程 A。进程 A 启动进程 D(不确定 B 发生了什么,但没关系)。进程 D 杀死进程 A。现在你的 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 关注
- 233 浏览
添加回答
举报
