braincrafted/background-process

启动后台进程,即使PHP进程存在,进程也会继续运行。

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

This package is auto-updated.

Last update: 2024-09-20 09:23:26 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文件。