amphp/process

基于 Amp 和 Revolt 的纤维感知进程管理器。

资助包维护!
amphp

v2.0.3 2024-04-19 03:13 UTC

README

AMPHP 是一个针对 PHP 设计的事件驱动库集合,考虑到纤维和并发性。 amphp/process 提供了一个在所有主要平台(包括 Windows)上工作的异步进程调度器。它使运行子进程变得简单。

由于 Windows 管道是文件句柄且不允许非阻塞访问,因此该软件包使用了一个 进程包装器,通过套接字提供对这些管道的访问。在类 Unix 系统上,它使用标准管道,因为这些管道可以无阻塞访问。并发性由 Revolt 事件循环管理。

Latest Release MIT License

安装

此软件包可以作为 Composer 依赖项安装。

composer require amphp/process

此软件包需要 PHP 8.1 或更高版本。

用法

使用 Process::start() 启动进程

<?php

require __DIR__ . "/vendor/autoload.php";

use Amp\ByteStream;
use Amp\Process\Process;

// "echo" is a shell internal command on Windows and doesn't work.
$command = DIRECTORY_SEPARATOR === "\\" ? "cmd /c echo Hello World!" : "echo 'Hello, world!'";

$process = Process::start($command);

Amp\async(fn () => Amp\ByteStream\pipe($process->getStdout(), ByteStream\getStdout()));
Amp\async(fn () => Amp\ByteStream\pipe($process->getStderr(), ByteStream\getStderr()));

$exitCode = $process->join();

echo "Process exited with {$exitCode}.\n";

自定义工作目录

默认情况下,进程使用当前进程的工作目录。如果需要,可以将工作目录自定义到另一个目录。

$process = Amp\Process\Process::start($command, workingDirectory: '/path/of/your/dreams');

自定义环境变量

默认情况下,进程使用当前进程的环境变量。可以通过传递一个将变量名映射到其值的关联数组来自定义环境。

$process = Amp\Process\Process::start($command, environment: [
    'PATH' => '/usr/bin/local'
]);

版本控制

amphp/process 遵循与其他 amphp 软件包相同的 semver 语义版本规范。

安全性

如果您发现任何安全相关的问题,请使用私有安全问题报告器,而不是使用公共问题跟踪器。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE