Process 클래스를 사용하여 Java 9에서 외부 프로세스의 실행을 제어하는 방법
개요:
Java에서는 Process 클래스를 사용하여 외부 프로세스와 쉽게 상호 작용할 수 있습니다. Java 9에는 외부 프로세스를 처리할 때 더욱 안전하고 유연한 접근 방식을 포함하여 몇 가지 새로운 기능이 도입되었습니다. 이 기사에서는 Java 9에서 Process 클래스를 사용하는 방법을 설명하고 코드 예제를 통해 사용법을 보여줍니다.
import java.io.IOException; public class ExternalProcessExample { public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe"); try { Process process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } } }
위 예제에서는 ProcessBuilder 객체를 생성하고 시작할 외부 프로세스의 명령을 'notepad.exe'로 지정했습니다. 그런 다음 start() 메서드를 사용하여 외부 프로세스를 시작합니다.
2.1 프로세스 종료 상태 듣기
waitFor() 메소드를 사용하여 외부 프로세스의 종료를 기다리고 종료 상태를 얻을 수 있습니다. 샘플 코드는 다음과 같습니다.
try { int exitValue = process.waitFor(); System.out.println("Process exited with value: " + exitValue); } catch (InterruptedException e) { e.printStackTrace(); }
위 예제에서는 waitFor() 메서드를 사용하여 외부 프로세스의 종료를 기다리고 종료 상태를exitValue 변수에 저장합니다.
2.2 외부 프로세스의 입력/출력 스트림 가져오기
때로는 프로세스와 상호 작용하기 위해 외부 프로세스의 입력/출력 스트림을 가져와야 하는 경우가 있습니다. Process 클래스는 해당 스트림을 얻기 위해 getInputStream(), getOutputStream() 및 getErrorStream() 메서드를 제공합니다.
try { // 获取进程输入流并发送数据 OutputStream outputStream = process.getOutputStream(); outputStream.write("Hello".getBytes()); // 获取进程输出流并读取数据 InputStream inputStream = process.getInputStream(); byte[] buffer = new byte[1024]; int length = inputStream.read(buffer); String output = new String(buffer, 0, length); System.out.println("Process output: " + output); // 获取进程错误流并读取错误信息 InputStream errorStream = process.getErrorStream(); byte[] errorBuffer = new byte[1024]; int errorLength = errorStream.read(errorBuffer); String errorMessage = new String(errorBuffer, 0, errorLength); System.out.println("Process error: " + errorMessage); } catch (IOException e) { e.printStackTrace(); }
위의 예에서는 getInputStream() 메서드를 사용하여 프로세스의 입력 스트림을 가져오고, getOutputStream() 메서드를 사용하여 프로세스의 출력 스트림을 가져오고, getErrorStream() 메서드를 사용하여 오류 스트림을 가져옵니다. 과정. 그런 다음 이러한 스트림을 사용하여 프로세스에 데이터를 보내고, 프로세스의 출력을 읽고, 프로세스의 오류 정보를 읽을 수 있습니다.
process.destroy();
또한 프로세스가 응답하지 않는 경우에도 destroyForcously() 메서드를 사용하여 프로세스를 강제로 삭제할 수도 있습니다. 샘플 코드는 다음과 같습니다.
process.destroyForcibly();
때로는 어떤 이유로 외부 프로세스가 종료되기를 기다리는 작업을 중단해야 할 때가 있습니다. Interrupt() 메서드를 사용하여 작업을 중단할 수 있습니다. 샘플 코드는 다음과 같습니다.
Thread currentThread = Thread.currentThread(); currentThread.interrupt();
ProcessBuilder processBuilder = new ProcessBuilder() .command("ping", "www.google.com") .redirectError(ProcessBuilder.Redirect.INHERIT);
위의 예에서는 command(String...) 메소드를 사용하여 외부 프로세스 명령을 'ping www.google.com'으로 지정했습니다. 또한 오류 출력 스트림을 표준 출력 스트림으로 리디렉션하기 위해 directError(ProcessBuilder.Redirect) 메서드를 사용합니다.
요약:
Java 9에서는 Process 클래스를 사용하여 외부 프로세스의 실행을 제어하는 것이 더욱 안전하고 유연해졌습니다. ProcessBuilder 클래스를 사용하여 외부 프로세스를 생성 및 시작하고, Process 클래스를 사용하여 프로세스 상태를 모니터링하고 입력/출력 스트림을 얻고 프로세스와 상호 작용할 수 있습니다. 또한 Java 9에서는 외부 프로세스의 실행을 설정하고 제한하기 위한 몇 가지 새로운 방법도 제공합니다.
참고 자료:
위 내용은 Java 9에서 Process 클래스를 사용하여 외부 프로세스 실행을 제어하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!