public static void main(String[] args) throws InterruptedException {
        if (args.length == 0) {
            ParamsParser.help();
            System.exit(1);
        }
        
        params = new ParamsParser(args);
        pool = Executors.newFixedThreadPool(params.cpu);
        System.out.print("Cores: " + Runtime.getRuntime().availableProcessors() + "\n");
        
        // формируем неизменную часть строки запуска
        String begin = params.fixed();
        if (params.crossAndMutate()) {
            for (int cross = params.crossBegin; cross < params.crossEnd; cross += params.crossStep) {
                for (int mutate = params.crossBegin; mutate <= params.mutateEnd; mutate += params.mutateStep) {
                    String cmd = begin + CMD.f.cmd(params.files) + CMD.cp.cmd(cross) + CMD.mp.cmd(mutate);
                    mutation(cmd);
                    //execute(cmd);
                }
            }
        }
        else if (params.crossover()) {
            for (int cross = params.crossBegin; cross < params.crossEnd; cross += params.crossStep) {
                String cmd = begin + CMD.f.cmd(params.files) + CMD.cp.cmd(cross) + CMD.m.cmd(params.mutation); 
                execute(cmd);
            }
        }
        else if (params.mutation()) {
            mutation(begin);
        }
        
        pool.shutdown();
    }