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设计模式 Delegation(委托模式)
Jun 26 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
Chrome Web App开发小结
Sep 04 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
PHP常量define和const的区别详解
May 18 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 PHP
PHP 8新特性简介
Aug 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
python自动翻译实现方法
2016/05/28 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python图形用户接口实例详解
2019/12/16 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
Python 列表的清空方式
2020/01/13 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
华为的Java面试题
2014/03/07 面试题
医学毕业生自我鉴定
2013/10/30 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
应届生求职信
2014/05/31 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记