func stopProcesses()

in agent/agent.go [252:288]


func stopProcesses(maxWaitTime time.Duration, messageSources *messagesources.MessageSources) {
	messageSources.SetTerminateProcess(true)

	var wg sync.WaitGroup

	wg.Add(1)
	go func() {
		var processActive bool
		var startTime = time.Now()
		// Check process state every second
		ticker := time.NewTicker(1 * time.Second)
		defer ticker.Stop()
		defer wg.Done()

		for processActive {
			select {
			case <-ticker.C:
				processActive = messageSources.GetProcessStatus()
				if !processActive {
					return
				}

				if time.Since(startTime) > maxWaitTime {
					processActive = false
				}
			}
		}

		pid := messageSources.GetPid()
		if pid > 0 {
			log.Infof("Killing pid [%d]", pid)
			syscall.Kill(pid, syscall.SIGKILL)
		}
	}()

	wg.Wait()
}