I'm trying to write a test that would drive out functionality for kill commands. To do this, I need the target of my test (a very simple go http server - https://github.com/jadekler/git-grunt-gostop/blob/master/test/fixtures/gostop_basic.go) to differentiate between having been killing with -2 vs -9. Is there some way to do this? It seems as though go's defer doesn't happen regardless of -2 vs -9, which was my first try. Subsequent research has not been enlightening.
Thanks for any suggestions!
You can catch signals using the os/signal
package. You can catch SIGINT
with code something like this:
import (
"os"
"os/signal"
)
...
// the signal module will lose notifications if the channel is not ready to receive, so give it a buffer
ch := make(chan os.Signal, 5)
go func() {
for sig := range ch {
// interrupt signal received
os.Exit(0)
}
}()
signal.Notify(ch, os.SIGINT)
Unfortunately, you can't do the same for SIGKILL
. From the signal(7)
man page:
The signals
SIGKILL
andSIGSTOP
cannot be caught, blocked, or ignored.