摘要:在之前,都是由類處來實現(xiàn)進程的控制管理。導(dǎo)致當前線程等待,如有必要,一直要等到由該對象表示的進程已經(jīng)終止。如果已終止該子進程,此方法立即返回。為了防止進程無限阻塞或者死鎖,使用類時,需要加上超時控制,詳細內(nèi)容可以看博文工具類,提供設(shè)置功能。
ProcessBuilder類是J2SE 1.5在java.lang中新添加的一個新類,此類用于創(chuàng)建操作系統(tǒng)進程,它提供一種啟動和管理進程(也就是應(yīng)用程序)的方法。在J2SE 1.5之前,都是由Process類處來實現(xiàn)進程的控制管理。本文簡單介紹一下Process類的用法以及一些需要注意的問題。
API方法說明如下:
- destroy() 殺掉子進程。
- exitValue() 返回子進程的出口值。該方法不阻塞,如果此 Process 對象表示的子進程尚未終止,就會拋出IllegalThreadStateException異常,中止進程
- getErrorStream() 獲取子進程的錯誤流
- getInputStream() 獲取子進程的輸入流
- getOutputStream() 獲取子進程的輸出流,基本上不會用到輸出流
- waitFor() 導(dǎo)致當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經(jīng)終止。導(dǎo)致當前線程等待,如有必要,一直要等到由該 Process對象表示的進程已經(jīng)終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調(diào)用的線程將被阻塞,直到退出子進程
一個簡單的例子:
/** * 列出所有的進程信息 */ 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的命令行執(zhí)行命令:tasklist,輸出結(jié)果如下:
注意問題:
因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區(qū)大小,如果讀寫子進程的輸出流或輸入流迅速出現(xiàn)失敗,則可能導(dǎo)致子進程阻塞,甚至產(chǎn)生死鎖。為了防止進程無限阻塞或者死鎖,使用Process類時,需要加上超時控制,詳細內(nèi)容可以看博文《Process工具類,提供設(shè)置timeout功能》。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64021.html
摘要:今晚將正式發(fā)布。競爭鎖的性能優(yōu)化能夠改善程序運行時的多線程同步效率。模塊化這就是令跳票數(shù)次的罪魁禍首。優(yōu)化字符串占用空間在很多應(yīng)用當中,字符串已經(jīng)成為一個消耗內(nèi)存的主要部分。 今晚 Java 9 將正式發(fā)布。Java 9 的新特性都列在官方頁面當中,本文介紹值得你關(guān)注的其中幾個點: ? 進程操作改進(JEP 102: Process API Updates) 新增的 java.lang...
摘要:摘要用到的工具,本文大量使用了來啟動各個應(yīng)用。,負責(zé)抓取存儲指標信息,并提供查詢功能。,負責(zé)數(shù)據(jù)可視化。,提供中和相關(guān)的。先講一下大致步驟利用,在進程內(nèi)啟動一個小型的配置抓取那個提供的。第三步配置啟動訪問,使用登錄。 原文地址 本文所提到的腳本可以在這里下載。 摘要 用到的工具: Docker,本文大量使用了Docker來啟動各個應(yīng)用。 Prometheus,負責(zé)抓取/存儲指標信息...
摘要:,負責(zé)抓取存儲指標信息,并提供查詢功能,本文重點使用它的告警功能。,負責(zé)將告警通知給相關(guān)人員。配置的告警觸發(fā)規(guī)則使用超過最大上限的機時間超過秒分鐘分鐘時間在最近分鐘里超過配置連接,配置。 原文地址 在前一篇文章中提到了如何使用Prometheus+Grafana來監(jiān)控JVM。本文介紹如何使用Prometheus+Alertmanager來對JVM的某些情況作出告警。 本文所提到的腳本可...
摘要:本文從裝飾模式出發(fā),聊聊中的裝飾器和注解。該函數(shù)的函數(shù)名。不提供元數(shù)據(jù)的支持。中的元數(shù)據(jù)操作可以通過包來實現(xiàn)對于元數(shù)據(jù)的操作。 ??隨著Typescript的普及,在KOA2和nestjs等nodejs框架中經(jīng)??吹筋愃朴趈ava spring中注解的寫法。本文從裝飾模式出發(fā),聊聊Typescipt中的裝飾器和注解。 什么是裝飾者模式 Typescript中的裝飾器 Typescr...
閱讀 2557·2021-11-24 10:20
閱讀 2415·2021-09-10 10:51
閱讀 3401·2021-09-06 15:02
閱讀 3140·2019-08-30 15:55
閱讀 2860·2019-08-29 18:34
閱讀 3099·2019-08-29 12:14
閱讀 1242·2019-08-26 13:53
閱讀 2958·2019-08-26 13:43