@Test(timeout=120000)
public void testDestroyAllShellProcesses() throws Throwable {

  Assume.assumeFalse(WINDOWS);
  StringBuffer sleepCommand = new StringBuffer();
  sleepCommand.append("sleep 200");
  String[] shellCmd = {"bash", "-c", sleepCommand.toString()};
  final ShellCommandExecutor shexc1 = new ShellCommandExecutor(shellCmd);
  final ShellCommandExecutor shexc2 = new ShellCommandExecutor(shellCmd);
  Thread shellThread1 = new Thread() {
    @Override
    public void run() {
      try {
        shexc1.execute();
      } catch(IOException ioe) {
        //ignore IOException from thread interrupt
      }
    }
  };
  Thread shellThread2 = new Thread() {
    @Override
    public void run() {
      try {
        shexc2.execute();
      } catch(IOException ioe) {
        //ignore IOException from thread interrupt
      }
    }
  };
  shellThread1.start();
  shellThread2.start();
  GenericTestUtils.waitFor(new Supplier<Boolean>() {
    @Override
    public Boolean get() {
      return shexc1.getProcess() != null;
    }
  }, 10, 10000);
  GenericTestUtils.waitFor(new Supplier<Boolean>() {
    @Override
    public Boolean get() {
      return shexc2.getProcess() != null;
    }
  }, 10, 10000);
  Shell.destroyAllShellProcesses();
  shexc1.getProcess().waitFor();
  shexc2.getProcess().waitFor();
}