public synchronized void start() throws Exception {
		if (thread != null) {
			throw new Exception("Slave Listener already started.");
		}
		
		thread = new Thread(new Runnable() {
			/** run()
			 * 
			 * Listens for requests from the ProcessManager
			 * Interprets the requests and responds to them
			 */
			@Override
			public void run() {
				running = true;
				while(running) {
					if (!sck.isClosed()) {
						Object request = null;
						
						try {
							request = sck.getIn().readObject();
						} catch (IOException e) {
							e.printStackTrace();
						} catch (ClassNotFoundException e) {
							e.printStackTrace();
						}
						
						if (request.equals("NumProcesses?")) {
							try {
								sck.getOut().writeObject(pm.getNumProcesses());
							} catch (IOException e) {
								e.printStackTrace();
							}
						} else if (request.equals("migrate")) {
							try {
								pm.migrate();
							} catch (IOException e) {
								e.printStackTrace();
							}
						} else {
							pm.addProcess((MigratableProcessWrapper) request);
						}
					}
				}
			}
		});
		
		thread.start();
	}