㈠ java進程怎麼實現
Java中多進程編程的實現,和多線程一樣,多進程同樣是實現並發的一種方式,需要的朋友可以參考下
1.Java進程的創建
Java提供了兩種方法用來啟動進程或其它程序:
(1)使用Runtime的exec()方法
(2)使用ProcessBuilder的start()方法
1.1 ProcessBuilder
ProcessBuilder類是J2SE 1.5在java.lang中新添加的一個新類,此類用於創建操作系統進程,它提供一種啟動和管理進程(也就是應用程序)的方法。在J2SE 1.5之前,都是由Process類處來實現進程的控制管理。
每個 ProcessBuilder 實例管理一個進程屬性集。start() 方法利用這些屬性創建一個新的 Process 實例。start() 方法可以從同一實例重復調用,以利用相同的或相關的屬性創建新的子進程。
每個進程生成器管理這些進程屬性:
命令 是一個字元串列表,它表示要調用的外部程序文件及其參數(如果有)。在此,表示有效的操作系統命令的字元串列表是依賴於系統的。例如,每一個總體變數,通常都要成為此列表中的元素,但有一些操作系統,希望程序能自己標記命令行字元串——在這種系統中,Java 實現可能需要命令確切地包含這兩個元素。
環境 是從變數 到值 的依賴於系統的映射。初始值是當前進程環境的一個副本(請參閱 System.getenv())。
工作目錄。默認值是當前進程的當前工作目錄,通常根據系統屬性 user.dir 來命名。
redirectErrorStream 屬性。最初,此屬性為 false,意思是子進程的標准輸出和錯誤輸出被發送給兩個獨立的流,這些流可以通過 Process.getInputStream() 和 Process.getErrorStream() 方法來訪問。如果將值設置為 true,標准錯誤將與標准輸出合並。這使得關聯錯誤消息和相應的輸出變得更容易。在此情況下,合並的數據可從 Process.getInputStream() 返回的流讀取,而從 Process.getErrorStream() 返回的流讀取將直接到達文件尾。
㈡ java怎麼殺掉java進程
java中有調用外部程序的類,Runtime.getRuntime().exec("./**.exe");此函數返回的是一個Process 對象,該對象在創建後,可以對它進行 destroy () 殺掉子進程、 waitFor () 導致當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經終止。 如下例子可以殺掉已經打開的文本進程:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassTest
{
publicstaticvoidmain(String[]args)
{
try
{
String[]cmd=
{"notepad.exe"};
Processproc=Runtime.getRuntime().exec(cmd);//開啟文本
BufferedReaderin=newBufferedReader(newInputStreamReader(proc
.getInputStream()));
Stringstring_Temp=in.readLine();
while(string_Temp!=null)
{
System.out.println(string_Temp);
if(string_Temp.indexOf("notepad.exe")!=-1)
Runtime.getRuntime().exec("Taskkill/IMnotepad.exe");
string_Temp=in.readLine();
}
}
catch(Exceptione)
{
//結束進程
}
}
結果如下:
㈢ Java如何得到當前進程ID號
Runtime.getruntime.exec()
會返回一個Process類型的對象,在java程序中只能用這個對象來監控。
可以創建一個新thread(假設叫W)來調用Process.waitFor()等待那個Runtime.exec產生的進程,然後判斷W.isAlive()