inits/cmd/dkl-system-init/dumb-init-bridge.go
2018-07-10 17:48:54 +11:00

40 lines
728 B
Go

package main
import (
"os"
"os/signal"
"golang.org/x/sys/unix"
"novit.nc/direktil/pkg/log"
)
func handleChildren() {
// set us as a sub-reaper
if err := unix.Prctl(unix.PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0); err != nil {
initLog.Taintf(log.Error, "reaper: failed to set myself a child sub-reaper: %v", err)
}
sigchld := make(chan os.Signal, 10)
signal.Notify(sigchld, unix.SIGCHLD)
for range sigchld {
// reap children
var (
ws unix.WaitStatus
rus unix.Rusage
)
for {
pid, err := unix.Wait4(-1, &ws, unix.WNOHANG, &rus)
if err != nil {
if err == unix.ECHILD {
break
}
initLog.Taintf(log.Warning, "reaper: wait4 failed: %v", err)
}
if pid <= 0 {
break
}
}
}
}