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 相关文章推荐
通过对php一些服务器端特性的配置加强php的安全
Oct 09 PHP
用PHP调用数据库的存贮过程!
Oct 09 PHP
PHP+MYSQL开发工具及资源收藏
Jan 02 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 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
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
javascript时区函数介绍
2012/09/14 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
JS实现小米轮播图
2020/09/21 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
快递业务员岗位职责
2014/01/06 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
加班费申请报告
2015/05/15 职场文书
催款律师函范文
2015/05/27 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android