6

私は次のようなプログラムを持っています:

import java.io.*;
   import java.util.*;

   public class ExecBashCommand {
     public static void main(String args[]) throws IOException {

       if (args.length <= 0) {
         System.err.println("Need command to run");
         System.exit(-1);
       }

       Runtime runtime = Runtime.getRuntime();
       Process process = runtime.exec("./nv0914 < nv0914.challenge");
       Process process1 = runtime.exec("echo ${?}");
       InputStream is = process1.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);
       String line;

       //System.out.printf("Output of running %s is:", Arrays.toString(args));

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }

     }
    } 

注: nv0914 は bash 実行可能ファイルで、nv0914.challenge はテキスト ファイルです。ターミナルで通常のコマンドを実行し、その直後にecho ${?}. 今、私はプログラムを使って同じことをしたいのですが、プログラムは単に出力を提供しています${?}. 私を助けてください!

4

1 に答える 1

18

Process.waitFor() はint終了コードを返します。無関係なプログラムを開始すると、以前の終了コードがないため、有用なものは何も返されません。

プログラムが終了する前に呼び出すことができるため、 exitValue() を確実に使用することはできません。これは、waitFor() を呼び出した後にのみ呼び出す必要があります (また、waitFor() と同じ終了コードが返されます)。

exitValue の Javadoc から

例外: IllegalThreadStateException - この Process オブジェクトによって表されるサブプロセスがまだ終了していない場合。

于 2011-05-04T16:50:45.020 に答える