mrden / forker
Requires
- php: ^7.3 || ^8.0
- ext-intl: *
- ext-json: *
- ext-mbstring: *
- ext-pcntl: *
- ext-posix: *
- ramsey/uuid: 3.*
Requires (Dev)
- friendsofphp/php-cs-fixer: 3.4.0
- phpunit/phpunit: ^9
- vimeo/psalm: ^4.30
README
安装
composer require mrden/forker
分叉单个可调用进程
$context = 'any parent code context data'; $callable = new \Mrden\Fork\Process\CallableProcess(function () use ($context) { echo 'context from parent process ' . $context; }); $forker = new \Mrden\Fork\Forker($callable); $forker->run(); // any code in this parent process
在3个副本中分叉实现的单个进程
namespace Any; class SingleProcess extends \Mrden\Fork\Contracts\Process { use \Mrden\Fork\Traits\ProcessFileStorageTrait; public function execute(): void { $params = $this->getParams(); echo 'context from parent process ' . ($params['context'] ?? ''); } protected function prepare(): void { } protected function checkParams(): void { } }
在代码中启动
$context = 'any parent code context data'; $singleProcess = new \Any\SingleProcess([ 'context' => $context ]); $forker = new \Mrden\Fork\Forker($singleProcess); $forker->run(3); // any code in this parent process
通过 bin/forker
启动
php bin/forker --process="\Any\SingleProcess" --count=3 --process-context="任何上下文数据"
在3个副本中分叉单个守护进程
namespace Any; class SingleDaemonProcess extends \Mrden\Fork\Contracts\DaemonProcess { use \Mrden\Fork\Traits\ProcessFileStorageTrait; /** * in sec */ protected $period = 5; protected function job(): void { echo 'I\'m the code of iteration daemon process'; } protected function checkParams(): void { } protected function prepare(): void { } }
在代码中启动
$singleProcess = new \Any\SingleDaemonProcess(); $forker = new \Mrden\Fork\Forker($singleProcess); $forker->run(3);
通过 bin/forker
启动
php bin/forker --process="\Any\SingleDaemonProcess" --count=3
通过 bin/forker
停止
php bin/forker --process="\Any\SingleDaemonProcess" --stop=1
通过 bin/forker
仅停止2个副本
php bin/forker --process="\Any\SingleDaemonProcess" --stop=1 --count=2
通过 bin/forker
仅停止第2个副本
php bin/forker --process="\Any\SingleDaemonProcess" --stop=1 --clone_number=2
通过 bin/forker
重新启动所有副本
php bin/forker --process="\Any\SingleDaemonProcess" --restart=1
通过 bin/forker
仅重新启动2个副本
php bin/forker --process="\Any\SingleDaemonProcess" --restart=1 --count=2
通过 bin/forker
仅重新启动第2个副本
php bin/forker --process="\Any\SingleDaemonProcess" --restart=1 --clone_number=2
启动单个守护进程监视器
namespace Any; class SingleDaemonWatcherProcess extends \Mrden\Fork\Contracts\DaemonWatcherProcess { use \Mrden\Fork\Traits\ProcessFileStorageTrait; protected function processes(): array { return return [ [ 'process' => \Any\SingleProcess::class, 'params' => [ 'time' => 11, ], 'count' => 1, ], [ 'process' => \Any\SingleDaemonProcess::class, 'count' => 2, ], ]; } protected function prepare(): void { } }
守护进程监视器进程仅在1个副本中分叉。
在代码中启动
$singleProcess = new \Any\SingleDaemonWatcherProcess(); $forker = new \Mrden\Fork\Forker($singleProcess); $forker->run();
通过 bin/forker
启动
php bin/forker --process="\Any\SingleDaemonWatcherProcess"
通过 bin/forker
停止
php bin/forker --process="\Any\SingleDaemonWatcherProcess" --stop=1
将停止所有(包括自身和子进程)
通过 kill
停止
kill PID
或kill -15 PID
- 将仅停止守护进程监视器,子进程将继续工作kill -10 PID
- 将停止所有(包括自身和子进程)
通过 bin/forker
仅重新启动守护进程监视器
php bin/forker --process="\Any\SingleDaemonWatcherProcess" --restart=1
通过 bin/forker
重新启动并重新启动子进程
php bin/forker --process="\Any\SingleDaemonWatcherProcess" --restart=1 --process-restartChildren=1