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中的加密功能
Oct 09 PHP
PHP4中实现动态代理
Oct 09 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php引用返回与取消引用的详解
Jun 08 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
PHP类的封装与继承详解
Sep 29 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
php与阿里云短信接口接入操作案例分析
May 27 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和MySql来与ODBC数据连接
2006/10/09 PHP
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
php Session存储到Redis的方法
2013/11/04 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
详解Python验证码识别
2016/01/25 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
使用Pycharm分段执行代码
2020/04/15 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
2015年幼儿园中班工作总结
2015/04/25 职场文书
小学远程教育工作总结
2015/08/13 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书