posts - 15,  comments - 8,  trackbacks - 0

          前言:Java 的類庫日益龐大,所包含的類和接口也不計其數。但其中有一些非常重要的類和接口,是Java類庫中的核心部分。常見的有String、Object、 Class、Collection、ClassLoader、Runtime、Process...,熟悉這些類是學好Java的基礎。而這些類一般不容 易理解,需要做深入的研究和實踐才能掌握。下面是我對這些類理解和使用的一些總結。歡迎你在閱讀后將你寶貴的意見和讀后感留下!

           

          一、概述
                Process類是一個抽象類(所有的方法均是抽象的),封裝了一個進程(即一個執行程序)。
                Process 類提供了執行從進程輸入、執行輸出到進程、等待進程完成、檢查進程的退出狀態以及銷毀(殺掉)進程的方法。
                ProcessBuilder.start() 和 Runtime.exec 方法創建一個本機進程,并返回 Process 子類的一個實例,該實例可用來控制進程并獲取相關信息。

                創建進程的方法可能無法針對某些本機平臺上的特定進程很好地工作,比如,本機窗口進程,守護進程,Microsoft Windows 上的 Win16/DOS 進程,或者 shell 腳本。創建的子進程沒有自己的終端或控制臺。它的所有標準 io(即 stdin,stdout,stderr)操作都將通過三個流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父進程。父進程使用這些流來提供到子進程的輸入和獲得從子進程的輸出。因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區大小,如果讀寫子 進程的輸出流或輸入流迅速出現失敗,則可能導致子進程阻塞,甚至產生死鎖。

                當沒有 Process 對象的更多引用時,不是刪掉子進程,而是繼續異步執行子進程。

           

          二、API預覽
           destroy()
             殺掉子進程。
           exitValue()
             返回子進程的出口值。
           InputStream getErrorStream()
             獲得子進程的錯誤流。
           InputStream getInputStream()
             獲得子進程的輸入流。
           OutputStream getOutputStream()
             獲得子進程的輸出流。
           waitFor()
             導致當前線程等待,如果必要,一直要等到由該 Process 對象表示的進程已經終止。

           

          三、如何創建Process對象,一般有一下兩種方法:

           

          1、每個 ProcessBuilder 實例管理一個進程屬性集。start() 方法利用這些屬性創建一個新的 Process 實例。start() 方法可以從同一實例重復調用,以利用相同的或相關的屬性創建新的子進程。(ProcessBuilder這個是JDK5中新添加的final類,詳細請參 看“深入研究java.lang.ProcessBuilder類”一文。

           

          2、Runtime.exec() 方法創建一個本機進程,并返回 Process 子類的一個實例。詳細請參看“深入研究java.lang.Runtime類”一文。

           

          四、官方API文檔。

           

          java.lang
          類 Process

          java.lang.Object
          繼承者java.lang.Process

          public abstract class Process
          extends Object

          ProcessBuilder.start()Runtime.exec 方法創建一個本機進程,并返回 Process 子類的一個實例,該實例可用來控制進程并獲取相關信息。Process 類提供了執行從進程輸入、執行輸出到進程、等待進程完成、檢查進程的退出狀態以及銷毀(殺掉)進程的方法。

          創建進程的方法可能無法針對某些本機平臺上的特定進程很好地工作,比如,本機窗口進程,守護進程,Microsoft Windows 上的 Win16/DOS 進程,或者 shell 腳本。創建的子進程沒有自己的終端或控制臺。它的所有標準 io(即 stdin,stdout,stderr)操作都將通過三個流 (getOutputStream()getInputStream()getErrorStream()) 重定向到父進程。父進程使用這些流來提供到子進程的輸入和獲得從子進程的輸出。因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區大小,如果讀寫子進程的輸出流或輸入流迅速出現失敗,則可能導致子進程阻塞,甚至產生死鎖。

          當沒有 Process 對象的更多引用時,不是刪掉子進程,而是繼續異步執行子進程。

          對于帶有 Process 對象的 Java 進程,沒有必要異步或并發執行由 Process 對象表示的進程。

          從以下版本開始:
          JDK1.0
          另請參見:
          ProcessBuilder, Runtime.exec(String[], String[], File)

          構造方法摘要
          Process()
                     
           
          方法摘要
          abstract  void destroy()
                    殺掉子進程。
          abstract  int exitValue()
                    返回子進程的出口值。
          abstract  InputStream getErrorStream()
                    獲得子進程的錯誤流。
          abstract  InputStream getInputStream()
                    獲得子進程的輸入流。
          abstract  OutputStream getOutputStream()
                    獲得子進程的輸出流。
          abstract  int waitFor()
                    導致當前線程等待,如果必要,一直要等到由該 Process 對象表示的進程已經終止。
           
          從類 java.lang.Object 繼承的方法
          clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
           

          構造方法詳細信息

          Process

          public Process()

          方法詳細信息

          getOutputStream

          public abstract OutputStream getOutputStream()
          獲得子進程的輸出流。輸出流被傳送給由該 Process 對象表示的進程的標準輸入流。

          實現注意事項:對輸出流進行緩沖是一個好主意。

          返回:
          連接到子進程正常輸入的輸出流。

          getInputStream

          public abstract InputStream getInputStream()
          獲得子進程的輸入流。輸入流獲得由該 Process 對象表示的進程的標準輸出流。

          實現注意事項:對輸入流進行緩沖是一個好主意。

          返回:
          連接到子進程正常輸出的輸入流。
          另請參見:
          ProcessBuilder.redirectErrorStream()

          getErrorStream

          public abstract InputStream getErrorStream()
          獲得子進程的錯誤流。錯誤流獲得由該 Process 對象表示的進程的錯誤輸出流傳送的數據。

          實現注意事項:對輸入流進行緩沖是一個好主意。

          返回:
          連接到子進程錯誤流的輸入流。
          另請參見:
          ProcessBuilder.redirectErrorStream()

          waitFor

          public abstract int waitFor()
          throws InterruptedException
          導致當前線程等待,如果必要,一直要等到由該 Process 對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,直到退出子進程。

          返回:
          進程的出口值。根據慣例,0 表示正常終止。
          拋出:
          InterruptedException - 如果當前線程在等待時被另一線程 中斷,則停止等待,拋出 InterruptedException

          exitValue

          public abstract int exitValue()
          返回子進程的出口值。

          返回:
          Process 對象表示的子進程的出口值。根據慣例,值 0 表示正常終止。
          拋出:
          IllegalThreadStateException - 如果此 Process 對象表示的子進程尚未終止。

          destroy

          public abstract void destroy()
          殺掉子進程。強制終止此 Process 對象表示的子進程。

           

          posted on 2008-06-04 20:47 lvq810 閱讀(931) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 漾濞| 西藏| 岳阳县| 南靖县| 安徽省| 开平市| 溧阳市| 新丰县| 五寨县| 长丰县| 莒南县| 宜宾县| 荥经县| 安岳县| 洛宁县| 台前县| 巧家县| 曲周县| 东乡族自治县| 鹤壁市| 密山市| 聂荣县| 天台县| 子洲县| 耒阳市| 大城县| 凤山县| 阳泉市| 涟源市| 杂多县| 咸丰县| 尼木县| 常州市| 东莞市| 密云县| 榆树市| 锡林郭勒盟| 甘孜县| 刚察县| 扶绥县| 东乡县|