private void runBackgroundTask(final Shell.ShellCommandExecutor shell,
    final RpcCallback<ShellExecResponse> done) {
    final long sleepDuration = conf.getLong(BACKGROUND_DELAY_MS_KEY, DEFAULT_BACKGROUND_DELAY_MS);
    backgroundExecutor.execute(() -> {
      try {
        // sleep first so that the RPC can ACK. race condition here as we have no means of blocking
        // until the IPC response has been acknowledged by the client.
        Thread.sleep(sleepDuration);
        doExec(shell, ShellExecResponse.newBuilder());
      } catch (InterruptedException e) {
        LOG.warn("Interrupted before launching process.", e);
      } catch (IOException e) {
        LOG.error("Failure launching process", e);
      }
    });
    done.run(ShellExecResponse.newBuilder().build());
  }
Receives shell commands from the client and executes them blindly. Intended only for use by
{@link ChaosMonkey} via {@link CoprocClusterManager}
hbase-it/src/test/java/org/apache/hadoop/hbase/ShellExecEndpointCoprocessor.java