PHP信号处理机制的操作代码讲解


Posted in PHP onApril 19, 2019

我们首先来看下实例代码:

function sig_handler($sig)

{

  print("handled sig: $sig\n");

}

 

 

 

pcntl_signal(SIGIO,  "sig_handler");

posix_kill(posix_getpid(),SIGIO);

 

while(true)

{

  posix_kill(posix_getpid(),SIGIO);

 

  pcntl_signal_dispatch();

 

  sleep(1);

}

最好自己手动循环处理信号队列,而不是使用php提供的的declare(ticks=1),tick_handler()这种信号处理机制,因为tick机制的性能问题,每执行一条语句都回调tick_handler查看是否有信号,而很大部分时间是没有信号的。

posix_signal设置信号的回调处理,

posix_kill仅仅是把信号放入进程的信号待处理队列中,所有并不会触发信号回调,由pcntl_signal_dispatch处理信号队列中的信号

posix_getpwnam("nginx"):获取用户名的uid,gid等信息

pcntl_signal(SIGPIPE, SIG_IGN, false):忽略内核发来的SIGPIPE信号,当连接已closed,进程继续发数据到无效socket,系统会收到含RST 控制位TCP包,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。该信号的默认处理是终止进程,进程可以捕获它并忽略该信号以免不情愿的被终止。

socket上下文选项:

backlog:用于限制流监听队列中未完成连接的连接数量

so_reuseport:重用端口(由内核调度连接到多个监听同一个端口的进程,由于是通过hash方式来标志连接对应的进程,所以监听进程数是不能改变的,)

定时器信号处理

pcntl_signal(SIGALRM,"sig_handler");

pcntl_alarm(2);

function sig_handler($sig)

{

  echo "one second after";

}

while (1)

{

  pcntl_signal_dispatch();

  sleep(1);

}
PHP 相关文章推荐
最省空间的计数器
Oct 09 PHP
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
实用函数10
Nov 08 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
PHP抽象类 介绍
Jun 13 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
如何使用php等比例缩放图片
Oct 12 PHP
PHP执行linux命令6个函数代码实例
Nov 24 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 #PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 #PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 #PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 #PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 #PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 #PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 #PHP
You might like
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
JavaScript保留关键字汇总
2015/12/01 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
JavaScript如何操作css
2020/10/24 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
python集合的新增元素方法整理
2020/12/07 Python
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
竞选文艺委员演讲稿
2014/04/28 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
物业保洁员管理制度
2015/08/05 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python
Fluentd搭建日志收集服务
2022/09/23 Servers