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下的权限算法的实现
Apr 28 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
PHP无限分类(树形类)
Sep 28 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
php中关于socket的系列函数总结
May 18 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
php编程每天必学之表单验证
Mar 01 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
ThinkPHP实现分页功能
Apr 28 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 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面向对象精要总结
2014/11/07 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
JS模板实现方法
2013/04/03 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
python 接口返回的json字符串实例
2018/03/27 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
Python 如何创建一个线程池
2020/07/28 Python
python中的django是做什么的
2020/07/31 Python
Python内置函数property()如何使用
2020/09/01 Python
python Timer 类使用介绍
2020/12/28 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
生产管理的三大手法
2013/11/11 职场文书
干部鉴定材料
2014/05/18 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
工程资料员岗位职责
2015/04/13 职场文书
学校捐款活动总结
2015/05/09 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书