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代码优化及php相关问题总结
Oct 09 PHP
php 远程关机操作的代码
Dec 05 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
浅谈php和.net的区别
Sep 28 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
解决laravel资源加载路径设置的问题
Oct 14 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
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python之指数与E记法的区别详解
2019/11/21 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
《特殊的葬礼》教学反思
2014/04/27 职场文书
离婚被告代理词
2015/05/23 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server