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 print EOF实现方法
May 21 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
php计算整个目录大小的方法
Jun 19 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 PHP
PHP实现登录验证码校验功能
May 17 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 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
hadoop常见错误以及处理方法详解
2013/06/19 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
简述Python2与Python3的不同点
2018/01/21 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python3中的bytes和str类型详解
2019/05/02 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
Python如何给你的程序做性能测试
2020/07/29 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
本科生求职简历的自我评价
2013/10/21 职场文书
学习交流会主持词
2014/04/01 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
硕士学位论文评语
2014/12/31 职场文书
黑白记忆观后感
2015/06/18 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
vue实现锚点定位功能
2021/06/29 Vue.js
Python&Matlab实现樱花的绘制
2022/04/07 Python