container/src/main/java/com/streamsets/datacollector/execution/runner/common/ProductionPipelineRunnable.java
public void forceQuit() {
    synchronized (relatedTasks){
      if (runningThread != null) {
        runningThread.interrupt();
        runningThread = null;
        cancelTask();
        postStop();
      }
    }
    countDownLatch.countDown();
  }
public void forceQuit() {
    synchronized (relatedTasks){
      if (runningThread != null) {
        runningThread.interrupt();
        runningThread = null;
        cancelTask();
        postStop();
      }
    }
    countDownLatch.countDown();
  }
This function is called while thread is waiting at countDownLatch.await in stop().
It cancels tasks, change pipeline state and call countDown(), so that the waiting thread
can proceed to terminate.