我有一个http服务器(使用http.Handle
启动),我想做一些操作。
我如何(在linux上)做到这一点?在使用ctrl-C的情况下可以执行这些操作吗?
我不熟悉unix信号,所以答案可能很简单。
发布于 2011-12-06 17:30:12
您可以使用signal包订阅TERM和INT信号。但请注意,这些信号仅在进程被显式终止时发送;正常退出(由进程本身发起)不涉及任何类型的信号。我认为对于正常的退出,只需在main例程中执行一些操作(这应该会产生worker goroutines,然后等待它们)。
有关man 7 signal
信号的更多一般信息,请阅读POSIX。
发布于 2012-06-21 05:23:09
使用kostix answer,我构建了以下代码(现在适用于Go1)来捕获中断信号,并在退出之前执行一些操作:
go func() {
sigchan := make(chan os.Signal)
signal.Notify(sigchan, os.Interrupt)
<-sigchan
log.Println("Program killed !")
// do last actions and wait for all write operations to end
os.Exit(0)
}()
// start main program tasks
https://stackoverflow.com/questions/8403862
复制