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源码之 ext/mysql扩展部分
Jul 17 PHP
PHP 可阅读随机字符串代码
May 26 PHP
php合并js请求的例子
Nov 01 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
php中的strpos使用示例
Feb 27 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
laravel安装和配置教程
Oct 29 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
python进程与线程小结实例分析
Nov 11 PHP
PDO::setAttribute讲解
Jan 29 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
Smarty模板类内部原理实例分析
Jul 03 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 什么是PEAR?
2009/03/19 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
javascript实现连续赋值
2015/08/10 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
微信小程序提交form操作示例
2018/12/30 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
python基础教程之循环介绍
2014/08/29 Python
python中遍历文件的3个方法
2014/09/02 Python
使用Python对SQLite数据库操作
2017/04/06 Python
python中map()函数的使用方法示例
2017/09/29 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
利用python画出折线图
2018/07/26 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
什么是servlet
2012/05/08 面试题
仓库保管员岗位职责
2013/12/20 职场文书
个人求职信范文
2014/05/24 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python