【发布时间】:2016-06-11 05:14:25
【问题描述】:
我正在尝试在 go 中构建一个聊天室应用程序,并且我想在客户端使用 ctrl+c 或按下终端的关闭按钮时调用注销功能。
我尝试了给定 here 和 here 的方法,但它们没有捕获任何信号(在 Windows 10 和 Fedora 23 中尝试过)。这是我的代码sn-p,
sigc := make(chan os.Signal, 1)
signal.Notify(sigc,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go func() {
_ = <-sigc
fmt.Println("ctrl+c pressed")
client.Logout()
}()
我有一些其他的函数使用 goroutine 同时运行,是这个函数没有捕获任何信号的原因吗?
任何帮助将不胜感激。
【问题讨论】:
-
在 unix 上捕获信号很好,因此您需要显示随附的代码。我对 Windows 不是很熟悉,使用 IIRC,您无法将 ctrl+c 作为信号捕获,它必须由终端处理。
-
@JimB 其余代码可以查看here。但是那没有我上面提到的代码sn-p。