func (s *ServiceManager) Stop(pid int) (bool, error) {
	log.Println("[DEBUG] stopping service with pid", pid)
	cmd := s.processMap.Get(pid)

	// Remove service from registry
	go func() {
		s.commandCompleteChan <- cmd
	}()

	// Wait for error, kill if it takes too long
	var err error
	done := make(chan error, 1)
	go func() {
		done <- cmd.Wait()
	}()

	select {
	case <-time.After(3 * time.Second):
		if err = cmd.Process.Kill(); err != nil {
			log.Println("[ERROR] timeout reached, killing pid", pid)

			return false, err
		}
	case err = <-done:
		if err != nil {
			log.Println("[ERROR] error waiting for process to complete", err)
			return false, err
		}
	}

	return true, nil
}
func (s *ServiceManager) Stop(pid int) (bool, error) {
	log.Println("[DEBUG] stopping service with pid", pid)
	cmd := s.processMap.Get(pid)

	
	go func() {
		s.commandCompleteChan <- cmd
	}()

	
	var err error
	done := make(chan error, 1)
	go func() {
		done <- cmd.Wait()
	}()

	select {
	case <-time.After(3 * time.Second):
		if err = cmd.Process.Kill(); err != nil {
			log.Println("[ERROR] timeout reached, killing pid", pid)

			return false, err
		}
	case err = <-done:
		if err != nil {
			log.Println("[ERROR] error waiting for process to complete", err)
			return false, err
		}
	}

	return true, nil
}
func ( s * ServiceManager ) Stop ( pid int ) ( bool , error ) { log . Println ( " " , pid ) cmd := s . processMap . Get ( pid ) // Remove service from registry go func ( ) { s . commandCompleteChan <- cmd } ( ) // Wait for error, kill if it takes too long var err error done := make ( chan error , 1 ) go func ( ) { done <- cmd . Wait ( ) } ( ) select { case <- time . After ( 3 * time . Second ) : if err = cmd . Process . Kill ( ) ; err != nil { log . Println ( " " , pid ) return false , err } case err = <- done : if err != nil { log . Println ( " " , err ) return false , err } } return true , nil }
// Stop a Service and returns the exit status.
Stop a Service and returns the exit status .