in agent/agent.go [290:328]
func setupSignalHandling(agentConfig config.AgentConfig, messageSources *messagesources.MessageSources) {
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan,
syscall.SIGTERM,
syscall.SIGQUIT)
agentPid := os.Getpid()
isInit := agentPid == 1
log.Debugf("Agent is running as pid [%d]", agentPid)
go func() {
for {
sig := <-signalChan
switch sig {
case syscall.SIGCHLD:
if isInit {
for {
// Reap all forked processes, that have been spawned elsewhere
// https://www.ianlewis.org/en/almighty-pause-container
_, err := syscall.Wait4(-1, nil, syscall.WNOHANG, nil)
if err != nil {
break
}
}
}
case syscall.SIGTERM:
fallthrough
case syscall.SIGQUIT:
gracefullyDrainEnvoyListeners(agentConfig)
log.Infof("Graceful Envoy listener draining completed! Exiting...")
messageSources.SetAgentExit()
default:
log.Debugf("Received unhandled signal [%v]\n", sig)
}
}
}()
}