mougrim / pcntl-signal-handler
PHP 的 PCNTL 信号处理程序
v1.0.3
2016-12-09 06:24 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-16 20:08:58 UTC
README
该库允许为同一个信号指定多个处理器。特别是对于 SIGHUP 信号来说非常重要。适用于低于 5.3 的 PHP 版本。
除了上述的 Mougrim_Pcntl_SignalHandler 类外,还模拟了 pcntl_signal_dispatch() 函数,该函数仅在 PHP 5.3.0 及以上版本中可用。输入文件 signalExampleRun.php
<?php // в начале подключаем SignalHandler, что бы был вызван declare(ticks = 1); require_once dirname(__FILE__) . "/src/lt5.3/Mougrim/Pcntl/SignalHandler.php"; require_once dirname(__FILE__) . "/SignalExample.php";; $signalHandler = new Mougrim_Pcntl_SignalHandler(); $signalExample = new SignalExample($signalHandler); $signalExample->run();
SignalExample.php 文件
<?php class SignalExample { private $signalHandler; public function __construct(Mougrim_Pcntl_SignalHandler $signalHandler) { $this->signalHandler = $signalHandler; } public function run() { // добавляем обработчик сигнала SIGTERM $this->signalHandler->addHandler(SIGTERM, array($this, 'terminate')); // добавляем обработчик сигнала SIGINT $this->signalHandler->addHandler(SIGINT, array($this, 'terminate')); while(true) { $this->signalHandler->dispatch(); // итерация цикла echo "итерация цикла\n"; usleep(300000); } } public function terminate() { // послать SIGTERM детям // ... echo "terminate\n"; exit(0); } }
适用于 PHP 5.3 或更高版本
输入文件 signalExampleRun53.php
<?php // в начале подключаем SignalHandler, что бы был вызван declare(ticks = 1); require_once dirname(__FILE__) . "/src/gte5.3/Mougrim/Pcntl/SignalHandler.php"; require_once dirname(__FILE__) . "/SignalExample53.php";; $signalHandler = new \Mougrim\Pcntl\SignalHandler(); $signalExample = new SignalExample53($signalHandler); $signalExample->run();
SignalExample53.php 文件
<?php class SignalExample53 { private $signalHandler; public function __construct(\Mougrim\Pcntl\SignalHandler $signalHandler) { $this->signalHandler = $signalHandler; } public function run() { // добавляем обработчик сигнала SIGTERM $this->signalHandler->addHandler(SIGTERM, array($this, 'terminate')); // добавляем обработчик сигнала SIGINT $this->signalHandler->addHandler(SIGINT, array($this, 'terminate')); while(true) { $this->signalHandler->dispatch(); // итерация цикла echo "итерация цикла\n"; usleep(300000); } } public function terminate() { // послать SIGTERM детям // ... echo "terminate\n"; exit(0); } }