public void shutdown(final boolean inputStreamIsStdin) {
		if (!inputStreamIsStdin) {
			// Sadly it appears its impossible to interrupt a read() on a
			// process
			// input stream (at least under W2K), so we can't shut down the
			// message
			// pump cleanly. It runs in a daemon thread, so this isn't a big
			// deal.
			m_messagePump.shutdown();
		}

		// Logback doesn't stop its loggers on exit (see LBCORE-202). We do
		// so explicitly to flush our BufferedEchoMessageEncoder.
		if (m_logbackLoggerContext != null) {
			m_logbackLoggerContext.stop();
		}
	}
The application's main loop. This is split from the constructor as theoretically it might be
called multiple times. The constructor sets up the static configuration, this does a single
execution.
<p/>
<p>
This method is interruptible, in the same sense as
{@link net.grinder.util.thread.InterruptibleRunnable#interruptibleRun()}. We don't implement
that method because we want to be able to throw exceptions.
</p>

@throws net.grinder.common.GrinderException
         If something went wrong.
ngrinder-runtime/src/main/java/net/grinder/engine/process/GrinderProcess.java