W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
java.lang.Object
|---java.lang.Process
public abstract class Process
extends Object
ProcessBuilder#start() 和 Runtime#exec(String[],String[],File) 方法創(chuàng)建本機進程并返回 Process 子類的實例,該實例可用于控制進程并獲取有關(guān)它的信息。 Process 類提供了執(zhí)行來自進程的輸入、執(zhí)行輸出到進程、等待進程完成、檢查進程的退出狀態(tài)以及銷毀(殺死)進程的方法。
創(chuàng)建進程的方法可能不適用于某些本機平臺上的特殊進程,例如本機窗口進程、守護進程、Microsoft Windows 上的 Win16/DOS 進程或 shell 腳本。
默認(rèn)情況下,創(chuàng)建的子進程沒有自己的終端或控制臺。它的所有標(biāo)準(zhǔn) I/O(即 stdin、stdout、stderr)操作都將被重定向到父進程,在那里可以通過使用 getOutputStream()、getInputStream() 和 getErrorStream() 方法獲得的流來訪問它們。父進程使用這些流向子進程提供輸入并從子進程獲取輸出。由于部分原生平臺只為標(biāo)準(zhǔn)輸入輸出流提供有限的緩沖區(qū)大小,未能及時寫入子進程的輸入流或讀取輸出流可能會導(dǎo)致子進程阻塞,甚至死鎖。
如果需要,也可以使用 ProcessBuilder 類的方法重定向子進程 I/O。
當(dāng)沒有更多對 Process 對象的引用時,子進程不會被終止,而是子進程繼續(xù)異步執(zhí)行。
不要求由 Process 對象表示的進程相對于擁有該 Process 對象的 Java 進程異步或并發(fā)執(zhí)行。
從 1.5 開始,ProcessBuilder#start() 是創(chuàng)建流程的首選方式。
構(gòu)造函數(shù) | 描述 |
---|---|
Process() |
修飾符和類型 | 方法 | 描述 |
---|---|---|
abstract void | destroy() | 殺死子進程。 |
Process | destroyForcibly() | 殺死子進程。 |
abstract int | exitValue() | 返回子進程的退出值。 |
abstract InputStream | getErrorStream() | 返回連接到子進程錯誤輸出的輸入流。 |
abstract InputStream | getInputStream() | 返回連接到子進程正常輸出的輸入流。 |
abstract OutputStream | getOutputStream() | 返回連接到子進程正常輸入的輸出流。 |
boolean | isAlive() | 測試這個 Process 所代表的子進程是否存活。 |
abstract int | waitFor() | 如有必要,使當(dāng)前線程等待,直到此 Process 對象表示的進程終止。 |
boolean | waitFor(long timeout, TimeUnit unit) | 如有必要,使當(dāng)前線程等待,直到此 Process 對象表示的子進程終止,或指定的等待時間過去。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public Process()
public abstract OutputStream getOutputStream()
返回連接到子進程正常輸入的輸出流。 流的輸出通過管道傳輸?shù)酱?Process 對象表示的進程的標(biāo)準(zhǔn)輸入中。
如果子流程的標(biāo)準(zhǔn)輸入已使用 ProcessBuilder#redirectInput(Redirect) 重定向,則此方法將返回空輸出流。
實施說明:對返回的輸出流進行緩沖是個好主意。
返回:
連接到子進程正常輸入的輸出流
public abstract InputStream getInputStream()
返回連接到子進程正常輸出的輸入流。 流從由該 Process 對象表示的進程的標(biāo)準(zhǔn)輸出中獲取通過管道傳輸?shù)臄?shù)據(jù)。
如果子流程的標(biāo)準(zhǔn)輸出已使用 ProcessBuilder#redirectOutput(Redirect) 重定向,則此方法將返回空輸入流。
否則,如果子進程的標(biāo)準(zhǔn)錯誤已經(jīng)使用 ProcessBuilder#redirectErrorStream(boolean) 重定向,則該方法返回的輸入流將接收合并后的標(biāo)準(zhǔn)輸出和子進程的標(biāo)準(zhǔn)錯誤。
實現(xiàn)說明:對返回的輸入流進行緩沖是個好主意。
返回:
連接到子進程正常輸出的輸入流
public abstract InputStream getErrorStream()
返回連接到子進程錯誤輸出的輸入流。 流從這個 Process 對象表示的進程的錯誤輸出中獲取數(shù)據(jù)。
如果子進程的標(biāo)準(zhǔn)錯誤已使用 ProcessBuilder#redirectError(Redirect) 或 ProcessBuilder#redirectErrorStream(boolean) 重定向,則此方法將返回 null 輸入流。
實現(xiàn)說明:對返回的輸入流進行緩沖是個好主意。
返回:
連接到子進程錯誤輸出的輸入流
public abstract int waitFor() throws InterruptedException
如有必要,使當(dāng)前線程等待,直到此 Process 對象表示的進程終止。 如果子進程已經(jīng)終止,則此方法立即返回。 如果子進程尚未終止,則調(diào)用線程將被阻塞,直到子進程退出。
返回:
此 Process 對象表示的子進程的退出值。 按照慣例,值為 0 表示正常終止。
Throws:
Throw名稱 | Throw描述 |
---|---|
InterruptedException | 如果當(dāng)前線程在等待時被另一個線程 Thread#interrupt(),則等待結(jié)束并拋出 InterruptedException。 |
public boolean waitFor(long timeout, TimeUnit unit) throws InterruptedException
如有必要,使當(dāng)前線程等待,直到此 Process 對象表示的子進程終止,或指定的等待時間過去。
如果子進程已經(jīng)終止,則此方法立即返回值為 true。 如果進程尚未終止并且超時值小于或等于零,則此方法立即返回值 false。
此方法的默認(rèn)實現(xiàn)會輪詢 exitValue 以檢查進程是否已終止。 強烈鼓勵此類的具體實現(xiàn)以更有效的實現(xiàn)覆蓋此方法。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
timeout | 最長等待時間 |
unit | timeout 參數(shù)的時間單位 |
返回:
如果子進程已退出,則為 true;如果在子進程退出之前經(jīng)過了等待時間,則為 false。
Throws:
Throw名稱 | Throw描述 |
---|---|
InterruptedException | 如果當(dāng)前線程在等待時被中斷。 |
NullPointerException | 如果單位為空 |
public abstract int exitValue()
返回子進程的退出值。
返回:
此 Process 對象表示的子進程的退出值。 按照慣例,值 0 表示正常終止。
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalThreadStateException | 如果此 Process 對象表示的子進程尚未終止 |
public abstract void destroy()
殺死子進程。 此 Process 對象表示的子進程是否被強制終止取決于實現(xiàn)。
public Process destroyForcibly()
殺死子進程。 此 Process 對象所代表的子進程被強制終止。
此方法的默認(rèn)實現(xiàn)調(diào)用destroy(),因此可能不會強制終止進程。 強烈鼓勵此類的具體實現(xiàn)使用兼容的實現(xiàn)覆蓋此方法。 在 ProcessBuilder#start 和 Runtime#exec 返回的 Process 對象上調(diào)用此方法將強制終止進程。
注意:子進程可能不會立即終止。 即 isAlive() 可能會在 destroyForcibly() 被調(diào)用后的短時間內(nèi)返回 true。 如果需要,此方法可以鏈接到 waitFor()。
返回:
表示要強制銷毀的子進程的 Process 對象。
public boolean isAlive()
測試這個 Process 所代表的子進程是否存活。
返回:
如果此 Process 對象表示的子進程尚未終止,則為 true。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: