<?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
PHP信号处理示例
- Jet Chen
- 0