如果你从应用程序中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,它会运行defer吗?或者它会立即退出?如果它立即退出,有办法绕过吗?一种在应用程序退出时运行代码的方法,不管怎样?

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
}()

最新更新