import java.io.*;
public class LinuxCommands {
public static void main(String args[]) {
try {
// Build the command as a list of strings
ProcessBuilder pb = new ProcessBuilder("echo", "Hello, World!");
pb.redirectErrorStream(true);
// Start the process
Process process = pb.start();
// Read the output from the process
InputStream is = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// Wait for the process to complete and check the exit value
int exitValue = process.waitFor();
if (exitValue != 0) {
System.out.println("Command exited with error code: " + exitValue);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 코드에서는 ProcessBuilder를 사용하여 Linux 명령줄에서 실행할 명령을 작성합니다. 명령과 해당 매개 변수를 문자열 목록으로 ProcessBuilder 생성자에게 전달합니다. 여기서 명령 echo와 인쇄할 문자열 "Hello, World!"를 전달합니다.
명령을 작성한 후 pb.redirectErrorStream(true)을 사용하여 오류 스트림을 출력 스트림으로 리디렉션합니다. 이를 통해 프로세스의 입력 스트림에서 출력 메시지와 오류 메시지를 모두 캡처할 수 있습니다.
그런 다음 실행 중인 프로세스를 나타내는 Process 오브젝트를 반환하는 pb.start()를 사용하여 프로세스를 시작합니다. 이 오브젝트를 사용하여 프로세스의 입력, 출력 및 오류 스트림에 액세스할 수 있습니다.
프로세스의 출력을 읽기 위해 process.getInputStream()을 사용하여 입력 스트림을 얻습니다. 그런 다음 입력 스트림을 읽기 위해 BufferedReader 개체를 만들고 reader.readLine()을 사용하여 더 이상 읽을 출력이 없을 때까지 출력 행을 반복합니다. 출력의 각 행에 대해 System.out.println(line)을 사용하여 콘솔에 출력합니다.
마지막으로 process.waitFor()를 사용하여 프로세스 사용이 완료될 때까지 기다립니다. 이 메서드는 프로세스가 종료될 때까지 현재 스레드를 차단합니다. 그런 다음 process.exitValue()를 사용하여 프로세스의 종료 값을 확인합니다. 종료 값이 0이 아닌 경우 오류 코드와 함께 종료된 명령을 나타내는 오류 메시지를 인쇄합니다. 프로그램 실행 중에 예외가 발생하면 이를 포착하고 e.printStackTrace()를 사용하여 스택 추적을 인쇄합니다.