void doneCommands() {
		if (commandsRunning.isEmpty()) return;

		// Commands to delete
		LinkedList<OsCmdRunner> toDelete = new LinkedList<OsCmdRunner>();

		for (OsCmdRunner cmd : commandsRunning) {
			if (cmd.isDone()) {
				toDelete.add(cmd);

				// Any error executing command?
				if (cmd.getExitValue() > 0) {
					String message = "Error executing command: " //
							+ "Command: " + cmd + "\n"//
							+ "\n---------- STDOUT: Start ----------\n" //
							+ cmd.getStdout() //
							+ "\n---------- STDOUT: End ----------\n" //
							+ "\n---------- STDERR: Start ----------\n" //
							+ cmd.getStderr() //
							+ "\n---------- STDERR: End ----------\n" //
					;

					// Should we throw an exception or just show a message?
					if (throwExceptionOnError) throw new RuntimeException(message);
					else System.err.println(message);
				}
			}
		}

		// Move from running list to done
		for (OsCmdRunner cmd : toDelete) {
			if (verbose) Timer.showStdErr("Finished command: " + cmd);
			commandsRunning.remove(cmd);
			commandsDone.add(cmd);
		}
	}