private void runProcess(String name, Object[] args) throws IOException{
        if(processList.get(name) != null){
            if(threadList.get(name).isAlive()) {
                sendToMaster("RunningError");
                return;
            } else {
                threadList.remove(name);
                processList.remove(name);
            }
        }
        MigratableProcess mpProcess = null;
        try {
            Class<MigratableProcess> mpClass = (Class<MigratableProcess>) Class.forName(name);
            Constructor<?> mpConstructor = mpClass.getConstructor(String[].class);
            mpProcess = (MigratableProcess) mpConstructor.newInstance(args);
        } catch (ClassNotFoundException e) {
            System.err.format("Class Not Found: Can't find class with provided class name", e.getMessage());
            return;
        } catch (NoSuchMethodException e) {
            System.err.format("No such method: No such constructor", e.getMessage());
            return;
        } catch (InstantiationException e) {
            System.err.format("Instantiation Error:", e.getMessage());
            return;
        } catch (IllegalAccessException e) {
            System.out.println(e.getMessage());
            return;
        } catch (InvocationTargetException e) {
            System.out.println(e.getMessage());
            return;
        }
        System.out.println("\nJob "+name+" start on this slave!");
        Thread tp = new Thread(mpProcess);
        tp.start();
        processList.put(name, mpProcess);
        threadList.put(name, tp);
    }