今天修改写脚本需要用到信号量控制脚本
下面是信号量控制类

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

嗯 对 原理就是接收到信号 然后终止循环 !