我正在尝试在 go 中构建一个聊天室应用程序,我想在客户端使用 ctrl+c 或按下终端的关闭按钮时调用注销功能。我尝试了此处和此处给出的方法,但它们没有捕获任何信号(在 Windows 10 和 Fedora 23 中尝试过)。这是我的代码片段,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 同时运行,这是这个函数没有捕获任何信号的原因吗?任何帮助,将不胜感激。
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
根据 上的文档os.Signal,应该可以在 Windows 上捕获中断:https : //golang.org/pkg/os/signal/#hdr-Windows。不过,我还没有亲自测试过。
我怀疑您的问题是您应该只使用从 导入的信号os,例如os.Interrupt, 而不是syscall.
来自https://golang.org/pkg/os/#Signal:
保证出现在所有系统上的唯一信号值是 Interrupt(向进程发送中断)和 Kill(强制进程退出)。
来自https://golang.org/pkg/syscall/#pkg-overview:
syscall 的主要用途是在其他包中,为系统提供更便携的接口,例如“os”、“time”和“net”。如果可以,请使用这些软件包而不是这个软件包。
因此,更改您的signal.Notify呼叫以仅捕获os.Interrupt信号。
- 1 回答
- 0 关注
- 600 浏览
添加回答
举报
0/150
提交
取消
