%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/yiisoft/yii2-queue/src/cli/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/yiisoft/yii2-queue/src/cli/SignalLoop.php |
<?php /** * @link https://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license https://www.yiiframework.com/license/ */ namespace yii\queue\cli; use yii\base\BaseObject; /** * Signal Loop. * * @author Roman Zhuravlev <zhuravljov@gmail.com> * @since 2.0.2 */ class SignalLoop extends BaseObject implements LoopInterface { /** * @var array of signals to exit from listening of the queue. */ public $exitSignals = [ 15, // SIGTERM 2, // SIGINT 1, // SIGHUP ]; /** * @var array of signals to suspend listening of the queue. * For example: SIGTSTP */ public $suspendSignals = []; /** * @var array of signals to resume listening of the queue. * For example: SIGCONT */ public $resumeSignals = []; /** * @var Queue */ protected $queue; /** * @var bool status when exit signal was got. */ private static $exit = false; /** * @var bool status when suspend or resume signal was got. */ private static $pause = false; /** * @param Queue $queue * @inheritdoc */ public function __construct($queue, array $config = []) { $this->queue = $queue; parent::__construct($config); } /** * Sets signal handlers. * * @inheritdoc */ public function init() { parent::init(); if (extension_loaded('pcntl') && function_exists('pcntl_signal')) { foreach ($this->exitSignals as $signal) { pcntl_signal($signal, function () { self::$exit = true; }); } foreach ($this->suspendSignals as $signal) { pcntl_signal($signal, function () { self::$pause = true; }); } foreach ($this->resumeSignals as $signal) { pcntl_signal($signal, function () { self::$pause = false; }); } } } /** * Checks signals state. * * @inheritdoc */ public function canContinue() { if (extension_loaded('pcntl') && function_exists('pcntl_signal_dispatch')) { pcntl_signal_dispatch(); // Wait for resume signal until loop is suspended while (self::$pause && !self::$exit) { usleep(10000); pcntl_signal_dispatch(); } } return !self::$exit; } }