public boolean startProcess(String processName, String[] processArgs, int slaveID, int processID) {
		// find the desired slave in the slavelist
		slavelist = handler.getSlaveList();
		Iterator<Integer> slaveIterator = slavelist.keySet().iterator();
		Socket slaveSocket = null;
		while (slaveIterator.hasNext()){
		  Integer id = slaveIterator.next();
		  if (id.intValue() == slaveID) {
			  slaveSocket = slavelist.get(id);
		  }		  
		}
		if (slaveSocket != null) {			
			try {
				if (slaveOutputStreamMap.containsKey(slaveID)) {
					outputStream = slaveOutputStreamMap.get(slaveID);
				} else {
					outputStream = new ObjectOutputStream(slaveSocket.getOutputStream());
					inputStream = new ObjectInputStream(slaveSocket.getInputStream());
					slaveOutputStreamMap.put(slaveID, outputStream);
					slaveInputStreamMap.put(slaveID, inputStream);
				}				
				outputStream.writeObject("start");
				outputStream.writeObject(processName);
				outputStream.writeObject(processArgs);
				outputStream.writeObject(new Integer(processID));
				String feedback = (String) inputStream.readObject();
				if (feedback.equals("fail")) {
					System.out.println("process failed to start...");
					return false;
				}
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			// record the process in the processSlaveMap and processlist
			processSlaveMap.put(processID, slaveID);
			processlist.put(processID, processName);
			processStatusMap.put(processID, "running");
		} else {
			System.out.println("slave with such slaveID does not exist!");
		}
		return true;
	}