go - CTRL + C 未被捕获

标签 go operating-system signals

我正在尝试编写一个程序,在按下 cntrl + c 时打印“等待”并继续打印从 1 到 10 的数字。否则,应该打印从 1 到 10 的数字,每个数字之间延迟 10 秒.但是,每当我单击并且“等待”不被打印时,control+ c 都不会被识别,只有 1 到 10 的数字是。

    func main() {
        c := make(chan os.Signal, 1)
        signal.Notify(c, os.Interrupt)
        go func() {
            for sig := range c {
                fmt.Print(sig)
                fmt.Print("WAIT")
            }
        }()
        for i := 1; i <= 10; i++ {
            fmt.Println(i)
            time.Sleep(time.Second)
        }

}

最佳答案

您需要确保您的终端或终端仿真器设置已设置为执行您正在尝试执行的操作。终端驱动程序做了很多过滤。例如,在 Enunchs 上, key 被翻译成发送到应用程序,然后作为 .

您的终端驱动程序可能只是忽略了 .它可能处于 passthu 模式,在这种模式下它只是作为一个字符发送到您的应用程序。

如何进行此类设置取决于您的操作系统。

关于go - CTRL + C 未被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169391/

相关文章:

php - 如何中断exec并杀死子进程

json - 使用 Go 正确解析 JSON 数据时出错

go - 部分实现接口(interface)的最佳实践

mysql - 在golang sql语句中转义滴答声

windows - 是否有 "free"方法可以在不同操作系统上进行测试?

c - 多线程应用程序中可重用代码中的计时器

go - dlv hugo 挂了

linux - 整体内核的效率

我可以在 C 中使用 asm() 代替 asm 吗?

我可以将 SIGCONT 发送到正在运行的进程吗?