From b01e67f9937cd4fde8918058bb2d835c09e0bb03 Mon Sep 17 00:00:00 2001 From: miyuko Date: Fri, 21 Nov 2025 15:09:36 +0000 Subject: [PATCH] Exit gracefully (run deferred statements in main()) on SIGINT. --- src/main.go | 7 ++++++- src/signal_other.go | 4 ++++ src/signal_posix.go | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main.go b/src/main.go index 7324035..8368f10 100644 --- a/src/main.go +++ b/src/main.go @@ -384,6 +384,11 @@ func Main() { } else { log.Println("serve: ready") } - select {} + + interrupt := make(chan struct{}) + OnInterrupt(func() { interrupt <- struct{}{} }) + <-interrupt + + log.Println("exiting gracefully") } } diff --git a/src/signal_other.go b/src/signal_other.go index 558a8cc..ecb6b48 100644 --- a/src/signal_other.go +++ b/src/signal_other.go @@ -5,3 +5,7 @@ package git_pages func OnReload(handler func()) { // not implemented } + +func OnInterrupt(handler func()) { + // not implemented +} diff --git a/src/signal_posix.go b/src/signal_posix.go index 55c7732..c6955bf 100644 --- a/src/signal_posix.go +++ b/src/signal_posix.go @@ -18,3 +18,13 @@ func OnReload(handler func()) { } }() } + +func OnInterrupt(handler func()) { + sigint := make(chan os.Signal, 1) + signal.Notify(sigint, syscall.SIGINT) + go func() { + <-sigint + signal.Stop(sigint) + handler() + }() +}