cocur / background-process
在后台启动进程,当PHP进程存在时继续运行。
v0.7
2017-02-11 12:41 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ~4.8|~5.1
README
在后台启动进程,当PHP进程存在时继续运行。
安装
您可以使用 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日)
- #19 从PID创建
BackgroundProcess
对象(由 socieboy 和 florianeckerstorfer 实现)
版本 0.6(2016年7月10日)
版本 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
作者
许可
MIT 许可证适用于 cocur/background-process。有关完整的版权和许可信息,请参阅随源代码一起分发的 LICENSE 文件。