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