[英]java killing process after a period of time
我的代碼是這樣的:
Runtime rt = Runtime.getRuntime();
// cmd == "cmd.exe /C java =Xms2M =Xmx16M Sth"
Process proc = rt.exec(cmd);
現在,我想在一秒鍾后終止此過程,並將其輸出和錯誤轉換為字符串變量。
怎么做 ?
就我而言:我在編譯類Sth中有一個不定式循環。 我正在啟動它,然后一秒鍾后我想殺死它。
//我正在Win XP,然后是Debian上對其進行測試。
蒂茲
這將有點棘手,因為一旦終止該進程,其輸出將不再可用,因此您必須在終止它之前先獲取該輸出。
Thread.sleep(1000);
InputStream in = proc.getInputStream();
byte[] data = new byte[in.available()];
in.read(data);
proc.destroy();
這是假設該過程在此期間不會自行關閉。 如果是這樣,InputStream將無法使用,並且您希望自己一直在讀取數據,而不是不停地搖晃手指。
您一定要使此異常安全- proc.destroy
的調用放在一個finally處理程序中,以確保終止子進程。
Runtime rt = Runtime.getRuntime();
// cmd == "cmd.exe /C java =Xms2M =Xmx16M Sth"
Process proc = rt.exec(cmd);
(您的cmd中有一個錯字,您寫的是“ = Xms2M”而不是“ -Xms2M”,與“ -Xmx16M”相同)。
永遠不要這樣調用Runtime.exec:您必須將“ cmd”分割成一個數組,否則會遇到很多問題。 像這樣做:
String[] sar = { "cmd.exe", "/C", "java", "-Xms2M", "-Xmx16M", "Sth" };
Runtime.getRuntime().exec( sar );
這也可以幫助您:
private static String runCommand(boolean debug, String... script) throws IOException, InterruptedException {
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(script);
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StreamReaderUtil.UTF8));
Thread.sleep(1000);
StringBuilder queryExe = new StringBuilder();
try {
String str;
while(reader.ready() && (str = reader.readLine()) != null) {
queryExe.append(str).append("\n");
}
} catch(IllegalThreadStateException e) {
Thread.sleep(250);
}
// FIXME: Replace with a Logger
if(debug) {
System.out.println("Executing : " + script);
System.out.println("Result : " + queryExe);
}
return queryExe.toString();
} finally {
if(process != null) {
process.destroy();
}
if(reader != null) {
reader.close();
}
}
}
您可以使用ProcessBuilder返回一個Process對象,並使用它的destroy()方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.