public int startProcess(String processName, String[] args, String addr) {
		MigratableProcess process;
		int processID;
		// Instantiate a process object
		try {
			Class<?> c = Class.forName(processName);
			Constructor<?> myCtor = c.getConstructor(String[].class);
			process = (MigratableProcess) myCtor
					.newInstance(new Object[] { args });
			processID = getProcessID();
			if (processID <= 0) {
				System.out.println("Invalid process id!");
				return -1;
			}
			serialize(process, processID);
		} catch (ClassNotFoundException e1) {
			System.out.println("Class Not Found Exception!" + e1.getMessage());
			return -1;
		} catch (NoSuchMethodException e1) {
			System.out.println("No Such Method Exception!" + e1.getMessage());
			return -1;
		} catch (SecurityException e1) {
			System.out.println("Security Exception!");
			return -1;
		} catch (InstantiationException e1) {
			System.out.println("Instantiation Exception!");
			return -1;
		} catch (IllegalAccessException e1) {
			System.out.println("Illegal Access Exception!");
			return -1;
		} catch (IllegalArgumentException e1) {
			System.out.println("Illegal Argument Exception!");
			return -1;
		} catch (InvocationTargetException e1) {
			System.out.println("Invocation Target Exception!");
			return -1;
		}

		SlaveWorker slave = pickSlave(addr);
		sendTo("run " + processID, slave.ip, slave.port);
		processList.put(processID, process);
		activeProcess.add(processID);
		processWorker.put(processID, slave);
		return 1;
	}