Java

ProcessBuilder Java 쉘 명령어, 스크립트 실행

Karla Ko 2023. 12. 26. 10:52
728x90

 

쉘 스크립트 실행

1. ProcessBuilder 객체 생성

ProcessBuilder builder = new ProcessBuilder();

ProcessBuilder객체를 사용하여 Linux 또는 Window의 커맨드라인의 커맨드입력을 실행할 수 있다.

2. directory(new File(“파일경로”)) : 해당 커맨드를 실행할 경로

String homeDirectory = System.getProperty("user.home");
builder.directory(new File(homeDirectory));

3. command(“커맨드”) : 커맨드 입력메서드

builder.command("sh", "-c", "ls -l | grep P");

4. ProcuessBuilder.start() :커맨드 실행

  Process process = builder.start();

5. Process.getInputStream() : 커맨드 결과 반환

StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(),System.out::println);
class StreamGobbler implements Runnable {
    private InputStream inputStream;
    private Consumer<String> consumer;
    @Override
    public void run() {
        new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer);
    }
}
Executors.newSingleThreadExecutor().submit(streamGobbler);

Consumer

데이터(매개변수)를 소비(사용)하고 아무것도 생성(반환)하지 않습니다.
Consumer 인터페이스는 한 개의 제네릭 타입을 매개변수로 사용합니다.

Executors

쓰레드 생성.
제공된 작업(Runnable 구현체)을 실행 하는 객체가 구현해야할 인터페이스.
Thread를 만들고 관리하는 것을 고수준의 API Executors에게 위임합니다.
Runnable만 개발자가 만들고 생성, 종료, 없애기 작업(일련의 작업)들은 Executors가 해줍니다.

ExecutorService exr = Executors.newSingleThreadExecutor(); //   풀 안에 하나의 쓰레드만 생성하고 유지
exr.submit(task);    // 쓰레드 풀에 작업을 전달

1개이기 때문에 작업을 예약한 순서대로 처리를 합니다.

 

 

728x90