Java 9 の Process クラスを使用して外部プロセスの実行を制御する方法

WBOY
リリース: 2023-07-29 23:21:30
オリジナル
1311 人が閲覧しました

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();
ログイン後にコピー

さらに、 destroyForcibly() メソッドを使用して、プロセスが応答しない場合でもプロセスを強制的に破棄することもできます。サンプル コードは次のとおりです。

process.destroyForcibly();
ログイン後にコピー

場合によっては、何らかの理由で、外部プロセスの終了を待つ操作を中断する必要があります。操作を中断するには、interrupt() メソッドを使用できます。サンプル コードは次のとおりです。

Thread currentThread = Thread.currentThread();
currentThread.interrupt();
ログイン後にコピー
  1. 外部プロセスのセキュリティと制限
    Java 9 では、ProcessBuilder クラスの新しいメソッドを使用して、外部プロセスの実行を設定および制限できます。実行する外部処理コマンドをより正確に指定するには、command(String...)メソッドを使用します。さらに、エラー出力ストリームは、redirectError(ProcessBuilder.Redirect) メソッドを使用してリダイレクトできます。
ProcessBuilder processBuilder = new ProcessBuilder()
    .command("ping", "www.google.com")
    .redirectError(ProcessBuilder.Redirect.INHERIT);
ログイン後にコピー

上の例では、command(String...) メソッドを使用して、外部プロセス コマンドを「ping www.google.com」として指定します。また、 redirectError(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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート