登录
首页 >  Golang >  Go问答

按下ctrl-c退出应用程序时,Restore()函数是否会进行延迟运行?

来源:stackoverflow

时间:2024-03-19 14:12:22 304浏览 收藏

在 Go 语言中,defer 函数在程序退出时延迟运行。然而,当按下 Ctrl-C 退出应用程序时,该函数可能无法运行,因为信号会立即终止程序。解决方法是使用信号处理程序捕获 Ctrl-C 信号,并在信号处理函数中执行必要的清理操作。

问题内容

在 go 中,你有类似的东西:

func main() {
 defer func() {
        if r := recover(); r != nil {
            /*run some clean up code here...*/
            fmt.Println("Recovered")
        }
    }()

 /*Some code right here like a web server that runs until panic or ctrl-c'd out */

}

如果我在 linux 中按 ctrl-c,它会运行延迟吗?还是立即退出?如果它立即退出,有办法解决吗?无论如何,在应用程序退出时运行代码的方法?


解决方案


ctrl-c 或其他信号将终止程序而不调用延迟函数。您可以使用信号处理程序捕获 ctrl-c。阅读 os/signal 包的文档,它具有操作系统特定的行为。像下面这样的东西会捕获 ctrl-c:

c := make(chan os.Signal, 1)
    signal.Notify(c,os.Interrupt)
    go func() {
        s := <-c
        // signal caught, cleanup
    }()

本篇关于《按下ctrl-c退出应用程序时,Restore()函数是否会进行延迟运行?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>