mougrim/pcntl-signal-handler

PHP 的 PCNTL 信号处理程序

v1.0.3 2016-12-09 06:24 UTC

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);
	}
}