code: private List<SimulatorEvent> handleKillTaskAction(KillTaskAction action, long now) {
      TaskAttemptID taskId = action.getTaskID();
      // we don't have a nice(r) toString() in Hadoop's TaskActions 
      if (LOG.isDebugEnabled()) {
        LOG.debug("Handling kill task action, taskId=" + taskId + ", now=" + now);
      }
      
      SimulatorTaskInProgress tip = tasks.get(taskId);
      
      // Safety check: We might get a KillTaskAction even for completed reduces
      if (tip == null) {
        return SimulatorEngine.EMPTY_EVENTS;
      }
      
      progressTaskStatus(tip, now); // make progress up to date
      TaskStatus finalStatus = (TaskStatus)tip.getTaskStatus().clone();
      finalStatus.setFinishTime(now);
      finalStatus.setRunState(State.KILLED);
      finishRunningTask(finalStatus, now);
     
      if (finalStatus.getIsMap() || finalStatus.getPhase() == Phase.REDUCE) {
        // if we have already created a task attempt completion event we remember
        // the task id, so that we can safely ignore the event when its delivered
        orphanTaskCompletions.add(taskId);
      }
      return SimulatorEngine.EMPTY_EVENTS;
    }
docs: Kills a task attempt.
  
  @param action contains the task attempt to kill
  @param now current simulation time
  @return new events generated in response, empty