cocur/background-process

在后台启动进程,当PHP进程存在时继续运行。

v0.7 2017-02-11 12:41 UTC

This package is auto-updated.

Last update: 2024-09-20 09:49:23 UTC


README

在后台启动进程,当PHP进程存在时继续运行。

Latest Stable Version Build Status Windows Build status Code Coverage

安装

您可以使用 Composer 安装 Cocur\BackgroundProcess。

$ composer require cocur/background-process

用法

以下示例将在后台执行命令 sleep 5。因此,如果您在浏览器或命令行中运行以下脚本,它将立即完成执行。

use Cocur\BackgroundProcess\BackgroundProcess;

$process = new BackgroundProcess('sleep 5');
$process->run();

您可以检索进程ID(PID)并检查其是否正在运行

use Cocur\BackgroundProcess\BackgroundProcess;

$process = new BackgroundProcess('sleep 5');
$process->run();

echo sprintf('Crunching numbers in process %d', $process->getPid());
while ($process->isRunning()) {
    echo '.';
    sleep(1);
}
echo "\nDone.\n";

如果进程正在运行,您可以停止它

// ...
if ($process->isRunning()) {
    $process->stop();
}

请注意:如果父进程在后台运行的子进程运行时继续运行,您应使用更健壮的解决方案,例如,使用 Symfony Process 组件。

Windows支持

从版本0.5开始,Cocur\BackgroundProcess 包含了对Windows的基本支持。然而,目前支持非常有限。您可以后台运行进程,但不能将输出重定向到文件,也不能检索进程ID(PID),检查进程是否正在运行以及停止正在运行的进程。

实际上,以下方法在Windows系统上调用时将抛出异常

  • Cocur\BackgroundProcess\BackgroundProcess::getPid()
  • Cocur\BackgroundProcess\BackgroundProcess::isRunning()
  • Cocur\BackgroundProcess\BackgroundProcess::stop()

使用现有PID创建

如果您有一个长时间运行的进程并将其PID存储在数据库中,您可能希望在稍后的某个时刻(在您不再有BackgroundProcess对象的情况下)检查该进程是否仍在运行并停止该进程。

use Cocur\BackgroundProcess\BackgroundProcess;

$process = BackgroundProcess::createFromPID($pid);
$process->isRunning(); // -> true
$process->stop();      // -> true

变更日志

版本 0.7(2017年2月11日)

版本 0.6(2016年7月10日)

  • #17 在Unix/Linux系统上添加了向文件追加的能力(由 bpolaszek 实现)

版本 0.5(2015年10月24日)

  • 添加了Windows的基本支持

版本 0.4(2014年4月2日)

  • 将存储库转移到Cocur组织
  • 将命名空间更改为 Cocur
  • PSR-4 兼容的命名空间
  • #3 添加 BackgroundProcess::stop()(由 florianeckerstorfer 实现)

版本 0.3(2013年11月15日)

  • 将命名空间更改为 Braincrafted

作者

Florian Eckerstorfer

许可

MIT 许可证适用于 cocur/background-process。有关完整的版权和许可信息,请参阅随源代码一起分发的 LICENSE 文件。