code: private boolean handleCommandImpl(String[] args) throws IOException, SQLException, Throwable {
  		try {
  			// Fork to background task
  			if(args.length>0 && "&".equals(args[args.length-1])) {
  				String[] newArgs;
  				if(args.length==1) {
  					newArgs = AoArrays.EMPTY_STRING_ARRAY;
  				} else {
  					newArgs = new String[args.length-1];
  					System.arraycopy(args, 0, newArgs, 0, args.length-1);
  				}
  				ShellInterpreter shell=newShellInterpreter(in, out, err, newArgs);
  				shell.parent=this;
  				synchronized(jobs) {
  					jobs.add(shell);
  					if(isInteractive) {
  						out.print('[');
  						out.print(jobs.size());
  						out.print("] ");
  						out.println(shell.pid);
  						out.flush();
  					}
  					shell.start();
  				}
  				return true;
  			} else {
  				return handleCommand(args);
  			}
  		} catch(ThreadDeath TD) {
  			throw TD;
  		} catch(Throwable T) {
  			if(isInteractive) {
  				ErrorPrinter.printStackTraces(T, err);
  				err.flush();
  				return true;
  			} else throw T;
  		}
  	}
docs: Processes one command and returns.