code: func (n *ExecNode) Stop() error {
  	if n.Cmd == nil {
  		return nil
  	}
  	defer func() {
  		n.Cmd = nil
  	}()
  
  	if n.client != nil {
  		n.client.Close()
  		n.client = nil
  		n.wsAddr = ""
  		n.Info = nil
  	}
  
  	if err := n.Cmd.Process.Signal(syscall.SIGTERM); err != nil {
  		return n.Cmd.Process.Kill()
  	}
  	waitErr := make(chan error)
  	go func() {
  		waitErr <- n.Cmd.Wait()
  	}()
  	select {
  	case err := <-waitErr:
  		return err
  	case <-time.After(5 * time.Second):
  		return n.Cmd.Process.Kill()
  	}
  }
docs: // Stop stops the node by first sending SIGTERM and then SIGKILL if the node
  // doesn't stop within 5s