public void runProgramAndBlock()

in foundation/CDDBaselineJava/src/main/java/com/awslabs/aws/iot/greengrass/cdd/nativeprocesses/TempDirNativeProcessHelper.java [25:56]


    public void runProgramAndBlock(String program, Optional<List<String>> arguments, Optional<Map<String, String>> environmentVariables, Optional<Consumer<String>> stdoutConsumer, Optional<Consumer<String>> stderrConsumer) {
        String fullProgram = program;

        if (!program.startsWith("/")) {
            fullProgram = String.join("/", LAMBDA_DIRECTORY, getArchitecture(), program);
        }

        File programSource = new File(fullProgram);
        File programDestination = new File(String.join("/", "", "tmp", new File(program).getName()));

        try {
            Files.copy(programSource.toPath(), programDestination.toPath(), StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            throw new UnsupportedOperationException(e);
        }

        try {
            Files.setPosixFilePermissions(programDestination.toPath(), getPosixFilePermissions());
        } catch (IOException e) {
            throw new UnsupportedOperationException(e);
        }

        List<String> programAndArguments = new ArrayList<>();
        programAndArguments.add(programDestination.getAbsolutePath());
        arguments.ifPresent(args -> programAndArguments.addAll(args));

        ProcessBuilder pb = new ProcessBuilder(programAndArguments);

        environmentVariables.ifPresent(env -> pb.environment().putAll(env));

        getOutputFromProcess(log, pb, true, stdoutConsumer, stderrConsumer);
    }