diff --git a/global/signal_unix.go b/global/signal_unix.go index dd19e33..b6a88e1 100644 --- a/global/signal_unix.go +++ b/global/signal_unix.go @@ -9,6 +9,7 @@ import ( "syscall" ) +// SetupMainSignalHandler is for main to use at last func SetupMainSignalHandler() <-chan struct{} { mainOnce.Do(func() { mc := make(chan os.Signal, 2) diff --git a/global/signal_windows.go b/global/signal_windows.go index f1ae658..f098546 100644 --- a/global/signal_windows.go +++ b/global/signal_windows.go @@ -3,9 +3,12 @@ package global import ( + "errors" "fmt" + "net" "os" "os/signal" + "strings" "sync" "syscall" "time" @@ -20,6 +23,7 @@ var ( } ) +// SetupMainSignalHandler is for main to use at last func SetupMainSignalHandler() <-chan struct{} { mainOnce.Do(func() { // for stack trace collecting on windows @@ -38,6 +42,9 @@ func SetupMainSignalHandler() <-chan struct{} { for { c, err := pipe.Accept() if err != nil { + if errors.Is(err, net.ErrClosed) || strings.Contains(err.Error(), "closed") { + return + } log.Errorf("accept named pipe 失败: %v", err) continue }