Avoid child processes
This commit is contained in:
parent
7c635a8c83
commit
1c6c4273c9
1 changed files with 23 additions and 0 deletions
|
@ -28,6 +28,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
callback := func(pid int, wstatus syscall.WaitStatus) {
|
||||||
|
glog.V(2).Infof("removing child process pid %d, wstatus: %+v\n", pid, wstatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := make(chan os.Signal, 1024)
|
||||||
|
signal.Notify(sig, syscall.SIGCHLD)
|
||||||
|
go reapChildren(sig, callback)
|
||||||
|
|
||||||
// start a new nginx controller
|
// start a new nginx controller
|
||||||
ngx := newNGINXController()
|
ngx := newNGINXController()
|
||||||
// create a custom Ingress controller using NGINX as backend
|
// create a custom Ingress controller using NGINX as backend
|
||||||
|
@ -58,3 +66,18 @@ func handleSigterm(ic *controller.GenericController) {
|
||||||
glog.Infof("Exiting with %v", exitCode)
|
glog.Infof("Exiting with %v", exitCode)
|
||||||
os.Exit(exitCode)
|
os.Exit(exitCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func reapChildren(signal chan os.Signal, callback func(int, syscall.WaitStatus)) {
|
||||||
|
for {
|
||||||
|
<-signal
|
||||||
|
for {
|
||||||
|
var status syscall.WaitStatus
|
||||||
|
pid, _ := syscall.Wait4(-1, &status, 0, nil)
|
||||||
|
if pid <= 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
callback(pid, status)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue