ProcessBuilder 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此类用于创建操作系统进程。
[Android.Runtime.Register("java/lang/ProcessBuilder", DoNotGenerateAcw=true)]
public sealed class ProcessBuilder : Java.Lang.Object
[<Android.Runtime.Register("java/lang/ProcessBuilder", DoNotGenerateAcw=true)>]
type ProcessBuilder = class
inherit Object
- 继承
- 属性
注解
此类用于创建操作系统进程。
每个实例都 ProcessBuilder
管理一个进程属性集合。 方法 #start()
使用这些属性创建一个新 Process
实例。 #start()
可以从同一实例重复调用 方法,以创建具有相同或相关属性的新子进程。
每个进程生成器管理以下进程属性:
<ul>
<li>命令,表示要调用的外部程序文件及其参数(如果有)的字符串列表。 哪个字符串列表表示有效的操作系统命令依赖于系统。 例如,每个概念参数通常都是此列表中的元素,但有些操作系统的程序需要标记命令行字符串本身 - 在这样的系统上,Java 实现可能需要命令包含正好包含两个元素。
<li>a 环境,它是从 变量 到 值的系统相关映射。 初始值是当前进程环境的副本, (请参阅 System#getenv()
) 。
<li>a 工作目录。 默认值是当前进程的当前工作目录,通常是由系统属性 user.dir
命名的目录。
<li>“redirect-input”>i standard input</i> 的<>源。 默认情况下,子进程从管道读取输入。 Java 代码可以通过 返回 Process#getOutputStream()
的输出流访问此管道。 但是,可以使用 将标准输入重定向到另一个源 #redirectInput(Redirect) redirectInput
。 在这种情况下, Process#getOutputStream()
将返回 一个 null 输出流,其中:
<ul><li>方法 OutputStream#write(int) write
始终引发 IOException
<li>方法 OutputStream#close() close
不执行任何功能 </ul>
<li>“redirect-output”>i>standard output</i 和 <i>> standard error</i> 的目标<。 默认情况下,子进程将标准输出和标准错误写入管道。 Java 代码可以通过 和 Process#getErrorStream()
返回Process#getInputStream()
的输入流访问这些管道。 但是,可以使用 和 #redirectError(Redirect) redirectError
将标准输出和标准错误重定向到其他目标#redirectOutput(Redirect) redirectOutput
。 在这种情况下, Process#getInputStream()
和/或 Process#getErrorStream()
将返回 null 输入流,其中:
<ul>li 方法始终返回<-1
li>方法InputStream#available() available
始终返回 0
<li>方法InputStream#close() close
不执行任何工作 </ul InputStream#read() read
><>
<li>a redirectErrorStream 属性。 最初,此属性为 false
,这意味着子进程的标准输出和错误输出将发送到两个单独的流,可以使用 和 Process#getErrorStream()
方法访问Process#getInputStream()
它们。
如果值设置为 true
,则:
<ul><li>标准错误与标准输出合并,并始终发送到同一目标 (这样可以更轻松地将错误消息与相应的输出关联) <li>标准错误的常见目标,并且可以使用 li>重定向标准输出,在<#redirectOutput(Redirect) redirectOutput
创建子进程<>时忽略方法设置#redirectError(Redirect) redirectError
的任何重定向 li 从Process#getErrorStream()
返回的流将始终为 null 输入流</ul>
</ul>
修改进程生成器的属性将影响随后由该对象的 #start()
方法启动的进程,但永远不会影响以前启动的进程或 Java 进程本身。
大多数错误检查由 #start()
方法执行。 可以修改对象的状态,以便失败 #start()
。 例如,除非调用 ,否则 #start()
将命令属性设置为空列表不会引发异常。
<强>请注意,此类未同步。</strong> 如果多个线程同时访问实例 ProcessBuilder
,并且至少有一个线程在结构上修改了其中一个属性, 则必须 在外部同步该属性。
轻松启动使用默认工作目录和环境的新进程:
{@code
Process p = new ProcessBuilder("myCommand", "myArg").start();
}
以下示例使用修改后的工作目录和环境启动进程,并将标准输出和错误重定向到日志文件:
{@code
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
File log = new File("log");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
}
若要使用一组显式环境变量启动进程,请先调用 java.util.Map#clear() Map.clear()
,然后再添加环境变量。
在 1.5 中添加。
的 java.lang.ProcessBuilder
Java 文档。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
ProcessBuilder(IList<String>) |
使用指定的操作系统程序和参数构造进程生成器。 |
ProcessBuilder(String[]) |
使用指定的操作系统程序和参数构造进程生成器。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
JniIdentityHashCode |
此类用于创建操作系统进程。 (继承自 Object) |
JniPeerMembers |
此类用于创建操作系统进程。 |
PeerReference |
此类用于创建操作系统进程。 (继承自 Object) |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 (继承自 Object) |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 (继承自 Object) |
方法
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
Command() |
返回此进程生成器的操作系统程序和参数。 |
Command(IList<String>) |
设置此进程生成器的操作系统程序和参数。 |
Command(String[]) |
返回此进程生成器的操作系统程序和参数。 |
Directory() |
返回此进程生成器的工作目录。 |
Directory(File) |
设置此进程生成器的工作目录。 |
Dispose() |
此类用于创建操作系统进程。 (继承自 Object) |
Dispose(Boolean) |
此类用于创建操作系统进程。 (继承自 Object) |
Environment() |
返回此进程生成器环境的字符串映射视图。 |
Equals(Object) |
指示其他某个对象是否“等于”此对象。 (继承自 Object) |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
InheritIO() |
将子进程标准 I/O 的源和目标设置为与当前 Java 进程的源和目标相同。 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
RedirectError() |
返回此进程生成器的标准错误目标。 |
RedirectError(File) |
将此进程生成器的标准错误目标设置为文件。 |
RedirectError(ProcessBuilder+Redirect) |
返回此进程生成器的标准错误目标。 |
RedirectErrorStream() |
指示此进程生成器是否合并标准错误和标准输出。 |
RedirectErrorStream(Boolean) |
设置此进程生成器的 |
RedirectInput() |
返回此进程生成器的标准输入源。 |
RedirectInput(File) |
将此进程生成器的标准输入源设置为文件。 |
RedirectInput(ProcessBuilder+Redirect) |
返回此进程生成器的标准输入源。 |
RedirectOutput() |
返回此进程生成器的标准输出目标。 |
RedirectOutput(File) |
将此进程生成器的标准输出目标设置为文件。 |
RedirectOutput(ProcessBuilder+Redirect) |
返回此进程生成器的标准输出目标。 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
Start() |
使用此进程生成器的属性启动新进程。 |
ToArray<T>() |
此类用于创建操作系统进程。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
此类用于创建操作系统进程。 (继承自 Object) |
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.Finalized() |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此类用于创建操作系统进程。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
此类用于创建操作系统进程。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
此类用于创建操作系统进程。 |
GetJniTypeName(IJavaPeerable) |
此类用于创建操作系统进程。 |