摘要:在之前,都是由類處來實現進程的控制管理。導致當前線程等待,如有必要,一直要等到由該對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。為了防止進程無限阻塞或者死鎖,使用類時,需要加上超時控制,詳細內容可以看博文工具類,提供設置功能。
ProcessBuilder類是J2SE 1.5在java.lang中新添加的一個新類,此類用于創建操作系統進程,它提供一種啟動和管理進程(也就是應用程序)的方法。在J2SE 1.5之前,都是由Process類處來實現進程的控制管理。本文簡單介紹一下Process類的用法以及一些需要注意的問題。
API方法說明如下:
- destroy() 殺掉子進程。
- exitValue() 返回子進程的出口值。該方法不阻塞,如果此 Process 對象表示的子進程尚未終止,就會拋出IllegalThreadStateException異常,中止進程
- getErrorStream() 獲取子進程的錯誤流
- getInputStream() 獲取子進程的輸入流
- getOutputStream() 獲取子進程的輸出流,基本上不會用到輸出流
- waitFor() 導致當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經終止。導致當前線程等待,如有必要,一直要等到由該 Process對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,直到退出子進程
一個簡單的例子:
/** * 列出所有的進程信息 */ public class ListAllProcessTest { public static void main(String[] args) { BufferedReader br = null; Process process = null; try { process = Runtime.getRuntime().exec("tasklist"); br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK")); String line = null; System.out.println("列出所有正在運行的進程信息:"); while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } if(process!=null){ process.destroy(); } } } }
程序輸出如下:
直接在WIN7的命令行執行命令:tasklist,輸出結果如下:
注意問題:
因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區大小,如果讀寫子進程的輸出流或輸入流迅速出現失敗,則可能導致子進程阻塞,甚至產生死鎖。為了防止進程無限阻塞或者死鎖,使用Process類時,需要加上超時控制,詳細內容可以看博文《Process工具類,提供設置timeout功能》。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64021.html
摘要:今晚將正式發布。競爭鎖的性能優化能夠改善程序運行時的多線程同步效率。模塊化這就是令跳票數次的罪魁禍首。優化字符串占用空間在很多應用當中,字符串已經成為一個消耗內存的主要部分。 今晚 Java 9 將正式發布。Java 9 的新特性都列在官方頁面當中,本文介紹值得你關注的其中幾個點: ? 進程操作改進(JEP 102: Process API Updates) 新增的 java.lang...
摘要:摘要用到的工具,本文大量使用了來啟動各個應用。,負責抓取存儲指標信息,并提供查詢功能。,負責數據可視化。,提供中和相關的。先講一下大致步驟利用,在進程內啟動一個小型的配置抓取那個提供的。第三步配置啟動訪問,使用登錄。 原文地址 本文所提到的腳本可以在這里下載。 摘要 用到的工具: Docker,本文大量使用了Docker來啟動各個應用。 Prometheus,負責抓取/存儲指標信息...
摘要:,負責抓取存儲指標信息,并提供查詢功能,本文重點使用它的告警功能。,負責將告警通知給相關人員。配置的告警觸發規則使用超過最大上限的機時間超過秒分鐘分鐘時間在最近分鐘里超過配置連接,配置。 原文地址 在前一篇文章中提到了如何使用Prometheus+Grafana來監控JVM。本文介紹如何使用Prometheus+Alertmanager來對JVM的某些情況作出告警。 本文所提到的腳本可...
摘要:本文從裝飾模式出發,聊聊中的裝飾器和注解。該函數的函數名。不提供元數據的支持。中的元數據操作可以通過包來實現對于元數據的操作。 ??隨著Typescript的普及,在KOA2和nestjs等nodejs框架中經??吹筋愃朴趈ava spring中注解的寫法。本文從裝飾模式出發,聊聊Typescipt中的裝飾器和注解。 什么是裝飾者模式 Typescript中的裝飾器 Typescr...
閱讀 2544·2021-11-24 10:20
閱讀 2392·2021-09-10 10:51
閱讀 3381·2021-09-06 15:02
閱讀 3114·2019-08-30 15:55
閱讀 2841·2019-08-29 18:34
閱讀 3080·2019-08-29 12:14
閱讀 1218·2019-08-26 13:53
閱讀 2931·2019-08-26 13:43