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 破解防盗链图片函数
Dec 09 PHP
PHP 创建标签云函数代码
May 26 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
python实现bucket排序算法实例分析
2015/05/04 Python
python实现自动重启本程序的方法
2015/07/09 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
python中关于数据类型的学习笔记
2020/07/19 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
求职信写作要突出重点
2014/01/01 职场文书
粗加工管理制度
2014/02/04 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Selenium浏览器自动化如何上传文件
2022/04/06 Python