b48fd26478
related to https://github.com/golang/go/issues/9584 closes https://github.com/gokrazy/gokrazy/pull/266
53 lines
949 B
Go
53 lines
949 B
Go
package gokrazy
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func listenForSignals(sighup func()) {
|
|
{
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, unix.SIGHUP)
|
|
go func() {
|
|
for range c {
|
|
sighup()
|
|
}
|
|
}()
|
|
}
|
|
|
|
{
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, unix.SIGTERM, unix.SIGUSR1, unix.SIGUSR2)
|
|
go func() {
|
|
for sig := range c {
|
|
log.Printf("received signal %s, killing services", sig)
|
|
|
|
killSupervisedServicesAndUmountPerm(defaultSignalDelay)
|
|
|
|
switch sig {
|
|
case unix.SIGTERM:
|
|
reboot(true)
|
|
|
|
case unix.SIGUSR1:
|
|
log.Println("Halting")
|
|
code := uint(unix.LINUX_REBOOT_CMD_HALT)
|
|
if err := unix.Reboot(int(code)); err != nil {
|
|
log.Printf("HALT: %v", err)
|
|
}
|
|
|
|
case unix.SIGUSR2:
|
|
log.Println("Powering off")
|
|
if err := unix.Reboot(unix.LINUX_REBOOT_CMD_POWER_OFF); err != nil {
|
|
log.Printf("POWER_OFF: %v", err)
|
|
}
|
|
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
}
|