public abstract class Process extends Object
ProcessBuilder.start()
和Runtime.exec
方法创建一个本机进程并返回一个Process
子类的Process
,可以用来控制进程并获取有关它的信息。
Process
类提供了用于执行进程输入,执行到进程的输出,等待进程完成,检查进程的退出状态以及破坏(杀死)进程的方法。
创建进程的方法可能不适用于某些本机平台上的特殊进程,例如本机窗口进程,守护进程,Microsoft Windows上的Win16 / DOS进程或shell脚本。
默认情况下,创建的子进程没有自己的终端或控制台。 其所有的标准I / O(即标准输入,标准输出,标准错误)操作将被重定向到父进程,在那里他们可以经由使用所述方法获得的流进行访问getOutputStream()
, getInputStream()
和getErrorStream()
。 父进程使用这些流将输入提供给子进程并从子进程获取输出。 因为一些本地平台只为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞甚至死锁。
在需要的时候, subprocess I/O can also be redirected使用ProcessBuilder
类的方法。
当不再有对Process
对象的引用时,子进程不会被杀死,而是子进程继续异步执行。
不要求Process
对象表示的进程与拥有Process
对象的Java进程Process
执行或同时执行。
从1.5开始, ProcessBuilder.start()
是创建Process
的首选方式。
Constructor and Description |
---|
Process() |
Modifier and Type | Method and Description |
---|---|
abstract void |
destroy()
杀死子进程。
|
Process |
destroyForcibly()
杀死子进程。
|
abstract int |
exitValue()
返回子进程的退出值。
|
abstract InputStream |
getErrorStream()
返回连接到子进程的错误输出的输入流。
|
abstract InputStream |
getInputStream()
返回连接到子进程的正常输出的输入流。
|
abstract OutputStream |
getOutputStream()
返回连接到子进程正常输入的输出流。
|
boolean |
isAlive()
测试这个Process代表的子
Process 是否存活。
|
abstract int |
waitFor()
导致当前线程等待,如有必要,直到由此
Process 对象表示的进程已终止。
|
boolean |
waitFor(long timeout, TimeUnit unit)
使当前线程等待,如有必要,直到此
Process 对象表示的子
Process 已终止,或指定的等待时间过去。
|
public abstract OutputStream getOutputStream()
Process
对象表示的进程的标准输入中。
如果使用ProcessBuilder.redirectInput
重定向子进程的标准输入,则此方法将返回null output stream 。
实现注意事项:缓冲返回的输出流是一个好主意。
public abstract InputStream getInputStream()
Process
对象表示的进程的标准输出中获取数据。
如果使用ProcessBuilder.redirectOutput
重定向子进程的标准输出,则此方法将返回null input stream 。
否则,如果使用ProcessBuilder.redirectErrorStream
重定向子进程的标准错误,则此方法返回的输入流将接收合并的标准输出和子进程的标准错误。
实现注意事项:缓冲返回的输入流是一个好主意。
public abstract InputStream getErrorStream()
Process
对象表示的进程的错误输出中获取数据。
如果子流程的标准错误已使用ProcessBuilder.redirectError
或ProcessBuilder.redirectErrorStream
重定向,则此方法将返回null input stream 。
实现注意事项:缓冲返回的输入流是一个好主意。
public abstract int waitFor() throws InterruptedException
Process
对象表示的进程已终止。
如果子进程已经终止,此方法将立即返回。
如果子进程尚未终止,则调用线程将被阻止,直到子进程退出。
Process
对象表示的子进程的退出值。
根据惯例,值0
表示正常终止。
InterruptedException
- 如果当前线程在另一个线程正在等待时为interrupted ,则等待结束,并抛出InterruptedException
。
public boolean waitFor(long timeout, TimeUnit unit) throws InterruptedException
Process
对象表示的子Process
已终止,或指定的等待时间过去。
如果子进程已经终止,那么此方法将立即返回值为true
。 如果进程尚未终止,超时值小于或等于零,则此方法将立即返回值为false
。
此方法的默认实现轮询exitValue
以检查进程是否已终止。 强烈建议此类的具体实现用更有效的实现来覆盖此方法。
timeout
- 等待的最长时间
unit
-
timeout
论证的时间单位
true
如果子进程已经退出,并且
false
如果等待时间在子进程退出之前经过。
InterruptedException
- 如果当前线程在等待时中断。
NullPointerException
- 如果单位为空
public abstract int exitValue()
Process
对象表示的子进程的退出值。
按照惯例,值0
表示正常终止。
IllegalThreadStateException
- 如果此
Process
对象表示的子进程尚未终止
public abstract void destroy()
Process
对象表示的子进程是否被强制终止是否依赖于实现。
public Process destroyForcibly()
Process
对象表示的子进程被强制终止。
此方法的默认实现调用destroy()
,因此可能不会强制终止进程。 强烈建议使用此类的具体实现来使用兼容实现覆盖此方法。 调用此方法Process
通过返回的对象ProcessBuilder.start()
和Runtime.exec(java.lang.String)
会强行终止该进程。
注意:子进程不能立即终止。 即isAlive()
可能会在destroyForcibly()
被调用后的destroyForcibly()
返回true。 如果需要,此方法可以链接到waitFor()
。
Process
对象被强制销毁。
public boolean isAlive()
Process
是否存活。
true
如果此
Process
对象表示的子进程尚未终止。