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

我正在尝试在 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 同时运行,这是这个函数没有捕获任何信号的原因吗?


任何帮助,将不胜感激。


繁花如伊
浏览 601回答 1
1回答

白板的微信

根据 上的文档os.Signal,应该可以在 Windows 上捕获中断:https&nbsp;:&nbsp;//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信号。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go