start 静态方法
启动一个运行指定 arguments
的 executable
的进程。
返回一个 Future<Process>
,当进程成功启动时完成,完成时将返回一个 Process
实例。该 Process
对象可以用来与进程交互。如果进程无法启动,返回的 Future 将完成时抛出异常。
建议使用绝对路径来指定 executable
,因为解析 executable
路径是平台特定的。在Windows上,无论是环境映射参数中的任何 PATH
设置还是在 workingDirectory
参数中设置的路径,都忽略用于解析 executable
路径的用途。
使用 workingDirectory
为进程设置工作目录。请注意,在一些平台上,更改目录发生在执行进程之前,这可能会在用于可执行文件和参数的相对路径中使用时产生影响。
使用 environment
设置进程的环境变量。如果没有设置,将继承父进程的环境。目前,仅支持US-ASCII环境变量,如果传递了编码点超出US-ASCII范围的变量,则可能会发生错误。
如果 includeParentEnvironment
为 true
,进程的环境将包括父进程的环境,其中 environment
优先。默认值为 true
。
如果 runInShell
为 true
,进程将通过系统shell启动。在Linux和OS X上使用 /bin/sh
,而在Windows上使用 %WINDIR%\system32\cmd.exe
。
用户必须读取使用 Process.start
启动的进程的 stdout 和 stderr 流中所有的数据。如果用户没有读取流中的所有数据,则底层系统资源不会释放,因为仍有待处理的数据。
以下代码使用 Process.start
在Linux上在文件 test.dart
中搜索 main
。
var process = await Process.start('grep', ['-i', 'main', 'test.dart']);
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);
如果 mode
是 ProcessStartMode.normal(默认值),则将启动一个管道连接到 stdin
、stdout
和 stderr
的子进程。
如果mode
设置为ProcessStartMode.detached,则会创建一个分离进程。分离进程与其父进程没有连接,当父进程终止时可以独立运行。从分离进程可获得的信息只有其pid
。与stdin
、stdout
或stderr
没有连接,进程结束时的退出代码也无法获得。
如果mode
设置为ProcessStartMode.detachedWithStdio,则会创建一个分离进程,其中stdin
、stdout
和stderr
是连接在一起的。创建者可以通过这些通道与子进程通信。即使通信渠道关闭,分离进程也会继续运行。进程结束时的退出代码也无法获得。
mode
的默认值是ProcessStartMode.normal
。
实现
external static Future<Process> start(
String executable, List<String> arguments,
{String? workingDirectory,
Map<String, String>? environment,
bool includeParentEnvironment = true,
bool runInShell = false,
ProcessStartMode mode = ProcessStartMode.normal});