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