public void start() {
		ProcessBuilder builder = new ProcessBuilder(this.getExecutableName());
		try {
			builder.redirectErrorStream(true);
			process = builder.start();
			writer = new BufferedWriter(new OutputStreamWriter(
					process.getOutputStream()));
			OutputListener listener = new OutputListener(process, silent);
			new Thread(listener).start();
			try {
				for (LispCommand c : commands) {
					for (String exp : c) {
						if (this.running())
						{
							writer.write(exp);
							writer.write('\n');
							writer.flush();
						}
					}
					if (c.finalCommand())
						break;
				}
				this.stop();

			} catch (IOException e) {
				e.printStackTrace();
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}