background-process
background-process copied to clipboard
Start processes in the background that continue running when the PHP process exists.
cocur/background-process
Start processes in the background that continue running when the PHP process exists.
Installation
You can install Cocur\BackgroundProcess using Composer:
$ composer require cocur/background-process
Usage
The following example will execute the command sleep 5
in the background. Thus, if you run the following script
either in the browser or in the command line it will finish executing instantly.
use Cocur\BackgroundProcess\BackgroundProcess;
$process = new BackgroundProcess('sleep 5');
$process->run();
You can retrieve the process ID (PID) of the process and check if it's running:
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 the process runs you can stop it:
// ...
if ($process->isRunning()) {
$process->stop();
}
Please note: If the parent process continues to run while the child process(es) run(s) in the background you should use a more robust solution, for example, the Symfony Process component.
Windows Support
Since Version 0.5 Cocur\BackgroundProcess has basic support for Windows included. However, support is very limited at this time. You can run processes in the background, but it is not possible to direct the output into a file and you can not retrieve the process ID (PID), check if a process is running and stop a running process.
In practice, the following methods will throw an exception if called on a Windows system:
-
Cocur\BackgroundProcess\BackgroundProcess::getPid()
-
Cocur\BackgroundProcess\BackgroundProcess::isRunning()
-
Cocur\BackgroundProcess\BackgroundProcess::stop()
Create with existing PID
If you have a long running process and store its PID in the database you might want to check at a later point (when you don't have the BackgroundProcess object anymore) whether the process is still running and stop the process.
use Cocur\BackgroundProcess\BackgroundProcess;
$process = BackgroundProcess::createFromPID($pid);
$process->isRunning(); // -> true
$process->stop(); // -> true
Change Log
Version 0.7 (11 February 2017)
-
#19 Create
BackgroundProcess
object from PID (by socieboy and florianeckerstorfer)
Version 0.6 (10 July 2016)
Version 0.5 (24 October 2015)
- Added basic support for Windows
Version 0.4 (2 April 2014)
- Moved repository to Cocur organization
- Changed namespace to
Cocur
- PSR-4 compatible namespace
-
#3 Added
BackgroundProcess::stop()
(by florianeckerstorfer)
Version 0.3 (15 November 2013)
- Changed namespace to
Braincrafted
Author
License
The MIT license applies to cocur/background-process. For the full copyright and license information, please view the LICENSE file distributed with this source code.