为了账号安全,请及时绑定邮箱和手机立即绑定

使用 golang 在 windows 和 linux 中捕获 ctrl+c 或任何其他进程终止信号

使用 golang 在 windows 和 linux 中捕获 ctrl+c 或任何其他进程终止信号

Go
繁花如伊 2021-12-20 10:17:09
我正在尝试在 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信号。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 600 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号