Javaプロセス

2124 ワード

ProcesBuider.start()およびRuntime.exec()方法は、オペレーティングシステムのプロセスを作成し(コマンドライン操作を実行する)、プロセス状態を制御し、関連情報を得るためにProcessサブクラスの例に戻る。
   キークラス:Process、Process Buider、Runtime
   1. Process類はプロセスから入力、実行からプロセスに出力し、プロセスの完了を待つ、プロセスの終了状態をチェックする、プロセスを破壊(殺す)する方法を提供します。作成プロセスの方法は、いくつかのマシンのプラットフォーム上の特定のプロセスに対してうまく動作できないかもしれません。例えば、本機のウインドウプロセス、守護プロセス、Microsoft Windows上のWin 16/DOSプロセス、またはshellシナリオなどです。作成したサブプロセスは自分の端末やコンソールがありません。そのすべての標準io(すなわちstdin、stdout、stder)は、3つのストリーム(getOutputStream()、get InputStream()、およびgetError Stream()を介して親プロセスにリダイレクトされる。親プロセスは、これらのストリームを使用して、サブルーチンへの入力を提供し、サブルーチンからの出力を得る。いくつかのマシンのプラットフォームは標準入力と出力ストリームに対して限られたバッファサイズを提供していますので、読み書きプロセスの出力ストリームまたは入力ストリームが迅速に失敗すると、サブプロセスがブロックされ、デッドロックが発生することもあります。Processオブジェクトのより多くの参照がない場合は、子プロセスを削除するのではなく、非同期的に子プロセスを実行し続けます。Processオブジェクトを有するJavaプロセスについては、Processオブジェクトによって表されるプロセスを非同期または同時に実行する必要はない。
  2.各ProcesssBuiderの例は、プロセス属性セットを管理する。ProcessBuiderのstart()方法は、これらの属性を利用して新たなProcessのインスタンスを作成する。start()方法は、同じまたは関連する属性を利用して新たなサブプロセスを作成するために、同じ例から反復して呼び出すことができる。
  3.ProcessBuider.start()とRuntime.exec()の伝達パラメータは異なりますが、Runtime.exec()は単独の文字列を受け入れることができます。この文字列はスペースでコマンドプログラムとパラメータを分離します。文字列配列のパラメータも受け入れられます。ProcesssBuiderの構造関数は文字列のリストまたは配列です。リストの最初のパラメータは実行可能コマンドプログラムで、その他はコマンドライン実行に必要なパラメータです。JDKのソースコードを見ることによって、Runtime.execは最終的にProcess Buiderを呼び出すことによって操作を実行します。  キー方法:
  
p = Runtime.getRuntime().exec(cmd);   
//              
InputStream fis = p.getInputStream();   
//              
InputStreamReader isr = new InputStreamReader(fis);   
//          
BufferedReader br = new BufferedReader(isr);   
String line = null;   
//          
while ((line = br.readLine()) != null) {   
       System.out.println(line);   
}   


ProcessBuilder pb = new ProcessBuilder("java", "-jar", "Test3.jar");   
//              F:\dist   
//     ,    F:\dist    Test.jar       
pb.directory(new File("F:\\dist"));   
//              ,         ,   
//                     
Map<String, String> map = pb.environment();   
Process p1 = pb.start();   
//       p            
//                
System.exit(0);