我已经使用信号处理程序来处理SIGTERM
,SIGINT
信号。当 grpc 服务器启动并运行时,我发出sudo kill -15 [PID]
命令,但看不到正常的关闭日志报告,而且我得到:
[1] 41983 terminated go run mypkg/main.go
现在,当我使用 netstat 时,它报告端口号 50051 已打开,并且由于端口号繁忙,我无法运行我的服务器。
我做了什么:
func main() {
flag.Parse()
fmt.Printf("Starting up server on 0.0.0.0:%v...\n", *port)
server := NewServer(fmt.Sprintf("0.0.0.0:%d", *port))
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
server.Run()
wg.Done()
}()
// Signal handling and graceful shutdown of gRPC server
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
<-signalChan
server.Stop()
wg.Wait()
}
server.Stop()
函数用于停止 grpc 服务器grpcServer.GracefulStop()
,并记录一些数据。当我发布时,CTRL+C
一切都按预期工作。为什么对sudo kill -15
我有这种行为?