func setupSignalHandling()

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)
			}
		}
	}()
}