Java 進程的創建方法

Java 進程的創建方法

在 JDK 中,與進程有直接關係的類爲 Java.lang.Process,它是一個抽象類。在 JDK 中也提供了一個實現該抽象類的 ProcessImpl 類,若是用戶建立了一個進程,那麼確定會伴隨着一個新的 ProcessImpl 實例。同時和進程建立密切相關的還有 ProcessBuilder,它是在 JDK1.5 中才開始出現的,相對於 Process 類來講,提供了便捷的配置新建進程的環境,目錄以及是否合併錯誤流和輸出流的方式。ui

Java.lang.Runtime.exec 方法和 Java.lang.ProcessBuilder.start 方法均可以建立一個本地的進程,而後返回表明這個進程的 Java.lang.Process 引用。spa

Runtime.exec 方法創建一個本地進程

該方法在 JDK1.5 中,能夠接受 6 種不一樣形式的參數傳入。命令行

 Process exec(String command) 
 Process exec(String [] cmdarray) 
 Process exec(String [] cmdarrag, String [] envp) 
 Process exec(String [] cmdarrag, String [] envp, File dir) 
 Process exec(String cmd, String [] envp) 
 Process exec(String command, String [] envp, File dir)

他們主要的不一樣在於傳入命令參數的形式,提供的環境變量以及定義執行目錄。code

ProcessBuilder.start 方法來創建一個本地的進程

若是但願在新建立的進程中使用當前的目錄和環境變量,則不須要任何配置,直接將命令行和參數傳入 ProcessBuilder 中,而後調用 start 方法,就能夠得到進程的引用。orm

 Process p = new ProcessBuilder("command", "param").start();

也能夠先配置環境變量和工做目錄,而後建立進程。進程

 ProcessBuilder pb = new ProcessBuilder("command", "param1", "param2"); 
 Map<String, String> env = pb.environment(); 
 env.put("VAR", "Value"); 
 pb.directory("Dir"); 
 Process p = pb.start();

能夠預先配置 ProcessBuilder 的屬性是經過 ProcessBuilder 建立進程的最大優勢。並且能夠在後面的使用中隨着須要去改變代碼中 pb 變量的屬性。若是後續代碼修改了其屬性,那麼會影響到修改後用 start 方法建立的進程,對修改以前建立的進程實例沒有影響。cmd

相關文章
相關標籤/搜索