braincrafted / 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文件。