在 Windows 上正常终止进程

Joh*_*ite 13 windows service process go

我正在用 Go 编写服务器应用程序,并使用包装器将其作为 Windows 服务运行。

需要优雅地关闭服务器(以正确关闭资源和连接),而在 UNIX 中,它将通过 SIGTERM 信号进行处理。没什么大不了。

尽管在 Windows 上,事情似乎非常不同。我在本指南中看到信号实际上存在于 windows (?) 上,并且定义了 SIGTERM,尽管其他页面表明它们没有,或者使用其他机制,如 WM_CLOSE。

告诉无头进程优雅终止的最佳方法是什么?在 Go 中应该如何实现?

服务器设计为多平台的,因此最好采用最标准的方式。

col*_*tor 0

如果您正在运行某种形式的 Web 服务,最好使用 Web 服务本身来启动关闭,因为跟踪 PIDS 信号可能会变得混乱。

要停止 http Web 服务,只需添加如下路由:

http.HandleFunc("/shutdown",
        func(w http.ResponseWriter, r *http.Request) {
            // stops server - may want to add admin credentials check here!
            srv.Shutdown(context.Background())
        })
Run Code Online (Sandbox Code Playgroud)

Playground源代码示例。

2019/03/10 16:58:15 Listening on: :8080

$ curl 'localhost:8080/shutdown'

2019/03/10 17:04:17 Listening on: :8080
2019/03/10 17:04:19 exited cleanly
Run Code Online (Sandbox Code Playgroud)