深入研究java.lang.Process類

深入研究java.lang.Process類

**一仿荆、概述
** Process類是一個(gè)抽象類(所有的方法均是抽象的)妻怎,封裝了一個(gè)進(jìn)程(即一個(gè)執(zhí)行程序)箫锤。 Process 類提供了執(zhí)行從進(jìn)程輸入、執(zhí)行輸出到進(jìn)程僚焦、等待進(jìn)程完成锰提、檢查進(jìn)程的退出狀態(tài)以及銷毀(殺掉)進(jìn)程的方法。 ProcessBuilder.start() 和 Runtime.exec 方法創(chuàng)建一個(gè)本機(jī)進(jìn)程,并返回 Process 子類的一個(gè)實(shí)例立肘,該實(shí)例可用來控制進(jìn)程并獲取相關(guān)信息边坤。

  創(chuàng)建進(jìn)程的方法可能無法針對(duì)某些本機(jī)平臺(tái)上的特定進(jìn)程很好地工作,比如谅年,本機(jī)窗口進(jìn)程茧痒,守護(hù)進(jìn)程,Microsoft Windows 上的 Win16/DOS 進(jìn)程融蹂,或者 shell 腳本旺订。創(chuàng)建的子進(jìn)程沒有自己的終端或控制臺(tái)。它的所有標(biāo)準(zhǔn) io(即 stdin超燃,stdout区拳,stderr)操作都將通過三個(gè)流 (getOutputStream(),getInputStream()意乓,getErrorStream()) 重定向到父進(jìn)程樱调。父進(jìn)程使用這些流來提供到子進(jìn)程的輸入和獲得從子進(jìn)程的輸出。因?yàn)橛行┍緳C(jī)平臺(tái)僅針對(duì)標(biāo)準(zhǔn)輸入和輸出流提供有限的緩沖區(qū)大小洽瞬,如果讀寫子進(jìn)程的輸出流或輸入流迅速出現(xiàn)失敗,則可能導(dǎo)致子進(jìn)程阻塞业汰,甚至產(chǎn)生死鎖伙窃。

  當(dāng)沒有 Process 對(duì)象的更多引用時(shí),不是刪掉子進(jìn)程样漆,而是繼續(xù)異步執(zhí)行子進(jìn)程为障。

二、API預(yù)覽
destroy() 殺掉子進(jìn)程放祟。 exitValue() 返回子進(jìn)程的出口值鳍怨。 InputStream getErrorStream() 獲得子進(jìn)程的錯(cuò)誤流。 InputStream getInputStream() 獲得子進(jìn)程的輸入流跪妥。 OutputStream getOutputStream() 獲得子進(jìn)程的輸出流鞋喇。 waitFor() 導(dǎo)致當(dāng)前線程等待,如果必要眉撵,一直要等到由該 Process 對(duì)象表示的進(jìn)程已經(jīng)終止侦香。

三、如何創(chuàng)建Process對(duì)象纽疟,一般有一下兩種方法:

**
**
1罐韩、每個(gè) ProcessBuilder 實(shí)例管理一個(gè)進(jìn)程屬性集。start() 方法利用這些屬性創(chuàng)建一個(gè)新的 Process 實(shí)例污朽。start() 方法可以從同一實(shí)例重復(fù)調(diào)用散吵,以利用相同的或相關(guān)的屬性創(chuàng)建新的子進(jìn)程。(ProcessBuilder這個(gè)是JDK5中新添加的final類,詳細(xì)請(qǐng)參看“深入研究java.lang.ProcessBuilder類”一文矾睦。

2晦款、Runtime.exec() 方法創(chuàng)建一個(gè)本機(jī)進(jìn)程,并返回 Process 子類的一個(gè)實(shí)例顷锰。詳細(xì)請(qǐng)參看“深入研究java.lang.Runtime類”一文柬赐。

四、實(shí)例

 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;

/**
 * 控制臺(tái)處理工具箱 
 *
 * @author leizhimin 2009-6-25 14:12:14 
 */
public final class CmdToolkit {
    private static Log log = LogFactory.getLog(CmdToolkit.class);

    private CmdToolkit() {
    }

    /**
     * 讀取控制命令的輸出結(jié)果 
     *
     * @param cmd                命令 
     * @param isPrettify 返回的結(jié)果是否進(jìn)行美化(換行)官紫,美化意味著換行肛宋,默認(rèn)不進(jìn)行美化,當(dāng)此參數(shù)為null時(shí)也不美化, 
     * @return 控制命令的輸出結(jié)果
     * @throws IOException
     */
    public static String readConsole(String cmd, Boolean isPrettify) throws IOException {
        StringBuffer cmdout = new StringBuffer();
        log.info("執(zhí)行命令:" + cmd);
        Process process = Runtime.getRuntime().exec(cmd);     //執(zhí)行一個(gè)系統(tǒng)命令 
        InputStream fis = process.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        String line = null;
        if (isPrettify == null || isPrettify) {
            while ((line = br.readLine()) != null) {
                cmdout.append(line);
            }
        } else {
            while ((line = br.readLine()) != null) {
                cmdout.append(line).append(System.getProperty("line.separator"));
            }
        }
        log.info("執(zhí)行系統(tǒng)命令后的結(jié)果為:\n" + cmdout.toString());
        return cmdout.toString().trim();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末束世,一起剝皮案震驚了整個(gè)濱河市酝陈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁涉,老刑警劉巖沉帮,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異贫堰,居然都是意外死亡穆壕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門其屏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喇勋,“玉大人,你說我怎么就攤上這事偎行〈ū常” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蛤袒,是天一觀的道長熄云。 經(jīng)常有香客問我,道長妙真,這世上最難降的妖魔是什么缴允? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮珍德,結(jié)果婚禮上癌椿,老公的妹妹穿的比我還像新娘。我一直安慰自己菱阵,他們只是感情好踢俄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晴及,像睡著了一般都办。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天琳钉,我揣著相機(jī)與錄音势木,去河邊找鬼。 笑死歌懒,一個(gè)胖子當(dāng)著我的面吹牛啦桌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播及皂,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甫男,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了验烧?” 一聲冷哼從身側(cè)響起板驳,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碍拆,沒想到半個(gè)月后若治,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡感混,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年端幼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧满。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婆跑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谱秽,到底是詐尸還是另有隱情洽蛀,我是刑警寧澤摹迷,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布疟赊,位于F島的核電站,受9級(jí)特大地震影響峡碉,放射性物質(zhì)發(fā)生泄漏近哟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一鲫寄、第九天 我趴在偏房一處隱蔽的房頂上張望吉执。 院中可真熱鬧,春花似錦地来、人聲如沸戳玫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕宿。三九已至伦仍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間代赁,已是汗流浹背搓茬。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留试浙,地道東北人董瞻。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像田巴,于是被迫代替她去往敵國和親钠糊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉固额,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評(píng)論 0 9
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 1.要做一個(gè)盡可能流暢的ListView眠蚂,你平時(shí)在工作中如何進(jìn)行優(yōu)化的? ①Item布局斗躏,層級(jí)越少越好逝慧,使用hie...
    fozero閱讀 726評(píng)論 0 0
  • 【2017年最新】? iOS面試題及答案 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式啄糙,并簡要敘述笛臣? 設(shè)計(jì)模式是一種編碼經(jīng)...
    紫色冰雨閱讀 604評(píng)論 0 1
  • 首先得在https://developer.apple.com/ 進(jìn)行相關(guān)配置:Certificates, Ide...
    Super_Yi閱讀 412評(píng)論 1 2