windows - 在终端的 Windows 中优雅地退出 golang

标签 windows go operating-system

我无法正常退出我自己的 Windows go 程序。 os.Interrupt 似乎也不起作用。我想知道有没有办法在终端中优雅地退出golang程序?

func main() {

    sigs := make(chan os.Signal, 1)
    done := make(chan bool, 1)

    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        sig := <-sigs
        fmt.Println()
        fmt.Println(sig)
        done <- true
    }()

    fmt.Println("awaiting signal")
    <-done
    fmt.Println("exiting")
}

最佳答案

您的代码运行良好,程序正常退出,我在 Windows 命令提示符下对其进行了测试。

为了更加说服你,试着加上time.Sleep(5 * time.Second)<-done 之后,然后测试。当你中断它时,程序只会在 5 秒后关闭。

fmt.Println("awaiting signal")
<-done

fmt.Println("exiting in 5 seconds")
time.Sleep(5 * time.Second)
fmt.Println("exit success")

也像@ain 在评论中所说的那样,尝试添加 os.Interruptsignal.Notify

signal.Notify(sigs, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)

关于windows - 在终端的 Windows 中优雅地退出 golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57213146/

相关文章:

windows - 为什么 Docker 无法在 Windows 10 Home 中检测到 WSL 2 发行版?

c++ - C++,关闭后如何使控制台应用程序在后台运行?

mongodb - 使用官方 mongo-go-driver 进行正确的通配符多字段查询

memory - DMA 如何影响 CPU?

windows - 如何在 Windows 中使用通配符复制文件而不附加?

android - 无法使用库莱布拉

go - 编译器是否优化变量声明?

go - strings.Trim 正在删除字母 "i"(golang)

在 C 程序中捕获 Ctrl+C

c++ - 系统编程——Fork()方法