>  기사  >  Java  >  Java 9에서 Process 클래스를 사용하여 외부 프로세스 실행을 제어하는 ​​방법

Java 9에서 Process 클래스를 사용하여 외부 프로세스 실행을 제어하는 ​​방법

WBOY
WBOY원래의
2023-07-29 23:21:301310검색

Process 클래스를 사용하여 Java 9에서 외부 프로세스의 실행을 제어하는 ​​방법

개요:
Java에서는 Process 클래스를 사용하여 외부 프로세스와 쉽게 상호 작용할 수 있습니다. Java 9에는 외부 프로세스를 처리할 때 더욱 안전하고 유연한 접근 방식을 포함하여 몇 가지 새로운 기능이 도입되었습니다. 이 기사에서는 Java 9에서 Process 클래스를 사용하는 방법을 설명하고 코드 예제를 통해 사용법을 보여줍니다.

  1. 외부 프로세스 만들기
    Java 9에서는 외부 프로세스를 만드는 것이 매우 간단합니다. 먼저 ProcessBuilder 클래스를 사용하여 ProcessBuilder 개체를 만들고 시작할 외부 프로세스의 명령을 지정해야 합니다. 그런 다음 start() 메서드를 사용하여 외부 프로세스를 시작할 수 있습니다. 다음은 외부 프로세스를 생성하는 샘플 코드입니다.
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() 메서드를 사용하여 외부 프로세스를 시작합니다.

  1. 외부 프로세스 실행 제어
    외부 프로세스를 시작한 후에는 Process 클래스를 사용하여 실행을 제어할 수 있습니다. Process 클래스는 외부 프로세스의 상태를 모니터링하고, 입력/출력 스트림을 얻고, 프로세스와 상호 작용하는 데 도움이 되는 몇 가지 메서드를 제공합니다.

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() 메서드를 사용하여 오류 스트림을 가져옵니다. 과정. 그런 다음 이러한 스트림을 사용하여 프로세스에 데이터를 보내고, 프로세스의 출력을 읽고, 프로세스의 오류 정보를 읽을 수 있습니다.

  1. 외부 프로세스의 파괴 및 중단
    때로는 외부 프로세스를 수동으로 파괴해야 하는 경우가 있습니다. destroy() 메소드를 사용하여 프로세스를 파괴할 수 있습니다. 샘플 코드는 다음과 같습니다.
process.destroy();

또한 프로세스가 응답하지 않는 경우에도 destroyForcously() 메서드를 사용하여 프로세스를 강제로 삭제할 수도 있습니다. 샘플 코드는 다음과 같습니다.

process.destroyForcibly();

때로는 어떤 이유로 외부 프로세스가 종료되기를 기다리는 작업을 중단해야 할 때가 있습니다. Interrupt() 메서드를 사용하여 작업을 중단할 수 있습니다. 샘플 코드는 다음과 같습니다.

Thread currentThread = Thread.currentThread();
currentThread.interrupt();
  1. 외부 프로세스에 대한 보안 및 제한
    Java 9에서는 ProcessBuilder 클래스의 새로운 메서드를 사용하여 외부 프로세스의 실행을 설정하고 제한하는 것이 가능합니다. 실행할 외부 프로세스 명령을 보다 정확하게 지정하려면 command(String...) 메소드를 사용하십시오. 또한 오류 출력 스트림은 리디렉션Error(ProcessBuilder.Redirect) 메서드를 사용하여 리디렉션될 수 있습니다.
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에서는 외부 프로세스의 실행을 설정하고 제한하기 위한 몇 가지 새로운 방법도 제공합니다.

참고 자료:

  1. Java 9 프로세스 API Javadoc: https://docs.oracle.com/javase/9/docs/api/java/lang/Process.html
  2. Java 9 ProcessBuilder API Javadoc: https:// / /docs.oracle.com/javase/9/docs/api/java/lang/ProcessBuilder.html

위 내용은 Java 9에서 Process 클래스를 사용하여 외부 프로세스 실행을 제어하는 ​​방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.