陈建华的个人网站

PHP信号处理示例

  • Jet Chen
  • 2018-04-08
  • 0
<?php
//declare(ticks=1);
/*
 * 1.安装pcntl扩展
 * 2.业务场景设置一个状态判断值,加一个字段
 * 3.再加一层快照层
 * 4.PHP异常问题!
 * 5.DB,Mysql问题连接超时:pdo异常处理
 *
 */
//cli模式下有效
ignore_user_abort();
set_time_limit(0);
global $i,$trigger;
function handle(){
    global $trigger,$i;
    echo '接受到中断信号!';
    if(!$trigger){
        echo "容错处理开始\n";
        //执行完毕当前任务
        //数据回传队列
        //建立数据快照
        //恢复该队列原始数据
        sleep(4);
        echo "--end--$i--处理完毕\n";
        echo "容错处理结束\n";
    }else{
        echo "系统检测进程无错误\n";
        sleep(2);
        echo "正常退出\n";
    }
    exit(0);
}
//kill -不同等级(31中情况)
pcntl_signal(SIGINT, function ($sig){
    handle();
});
//针对ctrl+c 处理
pcntl_signal(SIGQUIT, function ($sig){
    handle();
});
/*try{

}catch (Exception $e){
    //1.
    posix_kill(posix_getpid(),SIGQUIT);
}*/
while (true) {
    $trigger = false;
    echo "--start--$i--开始\n";
    echo "-----$i 正在处理-----\n";
    sleep(2);
    echo "--end--$i--处理完毕\n";
    $trigger = true;
    $i++;
    sleep(1);
    pcntl_signal_dispatch();
}

参考地址:https://segmentfault.com/a/1190000006250949
© 2023 陈建华的个人网站
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}