Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

runtime#execの戻り値が取得できない

現在のウィンドウとは別のコマンドプロンプトを起動して指定したプログラムを実行させたいのですが、プログラムは実行できるものの戻り値が常に「0」になってしまいます。
以下ソースは外部プログラムの指定は外していますが、戻り値「9」が返却されず同じ問題かと思っています。
お手数ですが解決方法を教えてください。

String[] cmd = new String[6];
cmd[0] = "cmd";
cmd[1] = "/c";
cmd[2] = "start";
cmd[3] = "/wait";
cmd[4] = "exit";
cmd[5] = "9";
Process proc = Runtime.getRuntime().exec(cmd);
int ret = proc.waitFor();
System.out.println("戻り値は「" + ret + "」です。");

10

回答

14039

閲覧

10件の回答

評価

0

retが0以外になるなんて、あり得ないでしょ。

>お手数ですが解決方法を教えてください。

まずは、自分が実行していることがなんなのか、
を、理解すること。
API Documentを読みましょう。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Process.html

評価

0

cmdが正常終了しているから、常に0になりませんか?

1. execでcmdが実行される。
2. cmdからstartで更に別のプロセスが実行される。
3. startで実行されたプロセスがexit 9で終了。
4. cmdはstartされたプロセスがExitCode 9で終了した事を知る。
5. cmdが正常終了して、ExitCode 0

評価

0

さっそくの回答ありがとうございます。
度々申し訳ありませんが戻り値「9」を取得する方法教えて頂けないでしょうか?

評価

0

>> 不良社員

その前に start がなんなのか理解してないのかとおもわれるが。

評価

0

うむ、理解していなかった。

が、理解していようがいまいが、
「戻り値の9」を取得する方法は同じでしょ。

評価

0

前述したように、
子プロセスが、孫プロセスの結果を返してくれないと
どうにもなりません。

例示されたコマンドは、本当に意図した物でしょうか?
無意味なコマンドに思えますが。

Windowsの話であって、Javaの話ではないので、
適切な場所で聞いた方が早いと思いますよ。

評価

0

どうも親切にありがとう御座います。
本来は直接外部プログラムを実行しており、その際は戻り値は意図した結果を得れたのですが、SQLPLUSで実行ファイルにパラメータを指定する形のプログラムを実行した場合に途中で処理が待機状態になってしまい、試行錯誤した結果cmd・・・startで別プロセスで実行すると処理は動くようになりましたが戻り値が取得できなくなり質問させて頂いた次第です。直接コマンドプロンプトにコマンドを入力するとERRORLEVELに戻り値がセットされるので何とかなるかと思っていました。
別の方法を考えてみます。

評価

0

子プロセスが標準出力に出力している場合、
それを適宜読み込んであげないと、バッファが不足して
停止する場合があります。

評価

0

質問が悪かった様でスミマセンでした。
バッファが不足していました。
感謝!

評価

0

サンプルと解説どうぞ
When Runtime.exec() won't
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-
traps.html?page=1
Javaでシェルコマンドを実行して標準出力を取得する
http://blog.app-works.org/archives/194

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。