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 中的str_replace 函数总结
Apr 27 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
php绘制圆形的方法
Jan 24 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
PHP二维数组去重算法
Dec 17 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
thinkphp5 路由分发原理
Mar 18 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js输出列表实现代码
2010/09/12 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
React快速入门教程
2017/01/17 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
学生会副主席竞聘书
2014/03/31 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
1亿有多大教学反思
2014/05/01 职场文书
机动车登记业务委托书
2014/10/08 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
sql中mod()函数取余数的用法
2021/05/29 SQL Server