今天修改写脚本需要用到信号量控制脚本
下面是信号量控制类
<?php
/**
* Class Signal
* 信号量
*/
class Signal
{
private static $signal;
private static $runing = true;
/**
* Signal constructor.
* @throws
*/
private function __construct()
{
if (PHP_SAPI != 'cli') {
throw new \Exception('Must CLI Model');
}
static::pcntl_signal();
}
/**
* 安装信号处理器 kill 2
*/
private static function pcntl_signal()
{
// 三参数必须为false 缺省参数存在bug --disable-posix
pcntl_signal(SIGINT, function () {
self::$runing = false;
}, false);
}
/**
* 调用等待信号的处理器
* @param $runing
* @return bool
*/
public static function dispatch()
{
self::init();
pcntl_signal_dispatch();
return self::$runing;
}
/**
* @desc 初始
* @return mixed
* @throws
*------------------------------------------------------
*/
private static function init()
{
if (!isset(static::$signal)) {
static::$signal = new self();
}
return static::$signal;
}
}
举个栗子:
public function test()
{
do {
foreach (range(0, 1000) as $v) {
echo $v, PHP_EOL;
}
echo 'end------------', PHP_EOL;
} while (Signal::dispatch());
}
嗯 对 原理就是接收到信号 然后终止循环 !