java.lang.Runtimeとjava.lang.Process

Javaプログラムの中から別のプログラムを起動したいと思ったとき、どうすれば良いでしょうか。Javaには起動中のプロセスを制御するメソッドがjava.lang.Runtimeにありますが、その中のexecメソッドを使えばよさそうです。

execはstaticではないので、まずRuntimeインスタンスを取得しましょう。

Runtime rt = Runtime.getRuntime();
getRuntimeというstaticメソッドを使って、現在動作中のプロセスに対応するRuntimeインスタンスを取得することができます。あとはこのオブジェクトを使ってプロセスの起動ができます。
Process pr;
try {
	pr = rt.exec("ls");
} catch (java.io.IOException e) {
	System.err.println(e);
	System.exit(1);
}
起動するプログラムが見つからないことがあるので、java.io.IOExceptionがthrowされます。

プログラムの起動に成功すると子プロセスを制御するためにProcessオブジェクトが返されます。Processオブジェクトを使うと子プロセスの標準出力、標準エラー出力それぞれに対応する入力ストリームからデータを取り出したし、子プロセスの標準入力に対応する出力ストリームにデータを入れたり、また子プロセスを終了させたり、その終了ステータスを調べたりすることができます。

入力ストリームと出力ストリームのところが少し解りにくいかもしれません。子プロセスの出力を取り出すために親プロセス側はそれを入力ストリームとして扱います。従って子プロセスの標準出力、標準エラー出力を取得するには、それぞれ、

InputStream stdoutStream = pr.getInputStream();
InputStream stderrStream = pr.getErrorStream();
となりますし、子プロセスの標準入力は親プロセスからはデータを渡す必要があるので、出力ストリームを取得しますので
OutputStream stdinStream = pr.getOutputStream()
となります。


人材開発室 PoisonSoft