docs: void execute(ExecutableBuilder builder,
              int timeout,
              TimeUnit unit) throws
              CommandLineException,
              InterruptedException, ExecutionException, TimeoutException {
          Future<Void> task = executorService.submit(() -> {
              builder.build().execute();
              return null;
          });
          try {
              if (timeout <= 0) { //Synchronous
                  task.get();
              } else { // Guarded execution
                  try {
                      task.get(timeout, unit);
                  } catch (TimeoutException ex) {
                      // First make the context unusable
                      CommandContext c = builder.getCommandContext();
                      if (c instanceof TimeoutCommandContext) {
                          ((TimeoutCommandContext) c).timeout();
                      }
                      // Then cancel the task.
                      task.cancel(true);
                      throw ex;
                  }
              }
          } catch (InterruptedException ex) {
              // Could have been interrupted by user (Ctrl-C)
              Thread.currentThread().interrupt();
              cancelTask(task, builder.getCommandContext(), null);
              // Interrupt running operation.
              CommandContext c = builder.getCommandContext();
              if (c instanceof TimeoutCommandContext) {
                  ((TimeoutCommandContext) c).interrupted();
              }
              throw ex;
          }
      }