您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > php

写给PHP程序员的信号处理教程

时间:2022-06-16 10:46:19  来源:  作者:先言碎语

今天晚上吃卤煮,邻桌的妹子问我,这玩意儿能吃么?我:你觉得能吃就能吃。。。和内容无关的主题

什么是信号

信号就是事件发生时,对进程的一种通知机制(也叫软件中断)。当一个进程收到信号后,内核会暂停该进程正在执行的代码,并跳转到对应的信号处理函数中,如果处理函数不中断,执行完处理函数后,会继续执行之前中断的地方往下执行。

我们在FPM模式下写代码,不会遇到信号处理相关的问题,但是CLI模式下一些常驻内存的脚本,如何能够自由的重启、关闭、退出前做一些清理工作(断开链接,删除临时文件等)?

C的信号处理举例

写给PHP程序员的信号处理教程

 

上图中,我为信号SIGINT注册了处理函数sigint_handle,捕获到信号后,输出内容后退出,简单易懂吧。执行 gcc -o run run.c && ./run ,然后CTRL+C(会触发SIGINT信号),成功输出:成功捕获到信号2!,程序直接结束运行。

php的信号处理举例

写给PHP程序员的信号处理教程

 

pcntl_signal是PHP的信号处理注册方法,上面实现的功能和C实现的基本一致,不同的是,当前进程不会退出,并且多输出了一个signinfo(PHP是C写的,为啥刚刚C语言的没有信号相关的信息呢?因为PHP使用的是另一个信号函数sigaction,有兴趣的可以了解一下)

PHP的信号处理并不是直接调用C

写给PHP程序员的信号处理教程

 

这个是pcntl初始化的时候,将pcntl_signal_dispatch注册为tick的处理函数

写给PHP程序员的信号处理教程

 


pcntl_signal会将处理函数放到信号集合中(PHP的hash table),而php_signale4最终会调用sigaction进行底层的信号管理。

写给PHP程序员的信号处理教程

 


这里我省略了大量代码,将关键的点标记了出来,其实PHP维护一个自己的信号集合,每当调用pcntl_signal_dispatch时就会查询是否有信号,上面的SIG_BLOCK会将信号阻塞,这样只有我们把关键的代码执行完毕之后,再去触发信号处理函数以保证数据和程序逻辑的完整性。

PHP如何优雅的处理信号

经常见到身边的程序员们,每当需要重启PHP-FPM进程的时候,使用的招数是kill掉所有PHP进程,然后新启动。一般情况没啥问题,但有些时候可能某个进程的任务还没执行完,直接把人家中断了略显粗暴。其实只要你给PHP的Master进程发送一条USR2信号,它便会再处理完所有任务后,重启子进程,这才是所谓的优雅~

写给PHP程序员的信号处理教程

 

上图是我简单写的一个例子,如果我们想让进程优雅退出的时候,只需要发送SIGTERM信号即可。需要注意的是SIGKILL和SIGSTOP信号会略过信号阻塞会将进程直接停止,还有就是信号会中断睡眠(SLEEP),sleep如果没执行完会返回剩下的秒数,有兴趣可以试试。

信号相关的知识点其实有很多,还需要继续深入研究~上文中的PHP源码为7.1.25版本,各个版本可能不太一样。



Tags:PHP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
PHP 8.3 新特性解读
作者 | Deepak Vohra译者 | 明知山策划 | 丁晓昀本文是 PHP 8.x 系列文章的一部分。你可以通过订阅 RSS 来接收有关本系列文章的更新通知。PHP 仍然是互联网上使用最广泛的...【详细内容】
2024-03-12  Search: PHP  点击:(30)  评论:(0)  加入收藏
如何使用PHP SSH2模块执行远程Linux命令
PHP SSH2扩展是用于在PHP程序中使用SSH(安全壳协议)的一种扩展。它允许建立加密连接和执行远程命令、上传和下载文件等操作,十分方便实用。下面我将为大家详细介绍一下该扩展的...【详细内容】
2024-01-26  Search: PHP  点击:(114)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  Search: PHP  点击:(124)  评论:(0)  加入收藏
如何使用PHP抓取百度首页排名?方法与步骤详解
PHP是一种广泛应用于网站开发的脚本语言,具备简单、灵活、高效的特点,因此在SEO优化中也得到了广泛的应用。本文将深入解析如何使用PHP抓取百度首页排名,并介绍一些相关的内容...【详细内容】
2024-01-12  Search: PHP  点击:(85)  评论:(0)  加入收藏
2023 年,PHP 停滞不前
热心开发者分析了一波 GitHub 的数据后发现,编程语言为 PHP 的 PR 数量逐年下降。GitHut 是通过 GitHub 数据专门分析编程语言的项目。它基于各种编程语言在 GitHub 中的使用...【详细内容】
2023-12-17  Search: PHP  点击:(22)  评论:(0)  加入收藏
全方位深度剖析PHP7底层源码
PHP7是一门流行的Web编程语言,以其易学易用和广泛的应用场景而备受欢迎。本文将为您深入讲解PHP7的特性和优势,包括性能提升、语法改进和新特性等方面,帮助您了解和掌握这门灵...【详细内容】
2023-12-06  Search: PHP  点击:(188)  评论:(0)  加入收藏
PHP 8.3 正式发布!
作者 | Tim Anderson编译 | 如烟出品 | 51CTO技术栈(微信号:blog51cto)PHP 8.3 正式发布,最主要的变化是添加“类常量显式类型”、“只读属性深拷贝”,“以及对随机性功能的补充...【详细内容】
2023-11-27  Search: PHP  点击:(171)  评论:(0)  加入收藏
原来真的可以在 Next.js 中写 PHP 代码?
Next.js 14 近期发布,其中一个重大的功能点是 Server Actions 成为稳定版,因其超前和熟悉的开发方式,在社交网络上引起了一阵讨论,应该是下面这张图的内容了。图片有人说这是又...【详细内容】
2023-11-07  Search: PHP  点击:(297)  评论:(0)  加入收藏
PHP编程语言,这个老古董,还有人用吗?
近年来,随着大数据、云计算和人工智能等新兴技术的崛起,许多传统的编程语言悄然退出了舞台。而PHP(PHP Hypertext Preprocessor)作为最古老的编程语言之一,是否也在逐渐沦为过去...【详细内容】
2023-11-02  Search: PHP  点击:(235)  评论:(0)  加入收藏
通过这个技术,浏览器可以运行Node.js、Rust、Python、PHP、C++、Java代码了!
近日,WebContainers 发布重要更新,WASI(WebAssembly 系统接口)已全面集成到 WebContainers 中。这是一个重要里程碑,它扩大了可以使用浏览器执行的操作,是 Web 开发的全新范例,允许...【详细内容】
2023-10-13  Search: PHP  点击:(276)  评论:(0)  加入收藏
▌简易百科推荐
PHP 8.3 新特性解读
作者 | Deepak Vohra译者 | 明知山策划 | 丁晓昀本文是 PHP 8.x 系列文章的一部分。你可以通过订阅 RSS 来接收有关本系列文章的更新通知。PHP 仍然是互联网上使用最广泛的...【详细内容】
2024-03-12    InfoQ  Tags:PHP 8.3   点击:(30)  评论:(0)  加入收藏
如何使用PHP SSH2模块执行远程Linux命令
PHP SSH2扩展是用于在PHP程序中使用SSH(安全壳协议)的一种扩展。它允许建立加密连接和执行远程命令、上传和下载文件等操作,十分方便实用。下面我将为大家详细介绍一下该扩展的...【详细内容】
2024-01-26  开源技术小栈  微信公众号  Tags:PHP   点击:(114)  评论:(0)  加入收藏
如何使用PHP抓取百度首页排名?方法与步骤详解
PHP是一种广泛应用于网站开发的脚本语言,具备简单、灵活、高效的特点,因此在SEO优化中也得到了广泛的应用。本文将深入解析如何使用PHP抓取百度首页排名,并介绍一些相关的内容...【详细内容】
2024-01-12  ·小钟无艳遇  今日头条  Tags:php   点击:(85)  评论:(0)  加入收藏
2023 年,PHP 停滞不前
热心开发者分析了一波 GitHub 的数据后发现,编程语言为 PHP 的 PR 数量逐年下降。GitHut 是通过 GitHub 数据专门分析编程语言的项目。它基于各种编程语言在 GitHub 中的使用...【详细内容】
2023-12-17  OSC开源社区    Tags:PHP   点击:(22)  评论:(0)  加入收藏
全方位深度剖析PHP7底层源码
PHP7是一门流行的Web编程语言,以其易学易用和广泛的应用场景而备受欢迎。本文将为您深入讲解PHP7的特性和优势,包括性能提升、语法改进和新特性等方面,帮助您了解和掌握这门灵...【详细内容】
2023-12-06  笔画春秋润    Tags:PHP7   点击:(188)  评论:(0)  加入收藏
PHP 8.3 正式发布!
作者 | Tim Anderson编译 | 如烟出品 | 51CTO技术栈(微信号:blog51cto)PHP 8.3 正式发布,最主要的变化是添加“类常量显式类型”、“只读属性深拷贝”,“以及对随机性功能的补充...【详细内容】
2023-11-27    51CTO  Tags:PHP   点击:(171)  评论:(0)  加入收藏
原来真的可以在 Next.js 中写 PHP 代码?
Next.js 14 近期发布,其中一个重大的功能点是 Server Actions 成为稳定版,因其超前和熟悉的开发方式,在社交网络上引起了一阵讨论,应该是下面这张图的内容了。图片有人说这是又...【详细内容】
2023-11-07  编程界  微信公众号  Tags:PHP   点击:(297)  评论:(0)  加入收藏
PHP编程语言,这个老古董,还有人用吗?
近年来,随着大数据、云计算和人工智能等新兴技术的崛起,许多传统的编程语言悄然退出了舞台。而PHP(PHP Hypertext Preprocessor)作为最古老的编程语言之一,是否也在逐渐沦为过去...【详细内容】
2023-11-02  程序员职场故事    Tags:PHP编程   点击:(235)  评论:(0)  加入收藏
PHP如何获取前几天日期时间
在PHP中,我们经常需要获取当前日期的前几天日期时间,以便进行一些特定的计算或数据处理。本文将介绍如何使用PHP获取前几天的日期时间,并提供具体的实现示例和代码。文章地址ht...【详细内容】
2023-08-10  学无止境    Tags:PHP   点击:(388)  评论:(0)  加入收藏
PHP+Python轻松抓取网络图片资源
你是否曾经遇到过需要从网络上获取大量图片的需求?你是否曾经为手动下载图片而感到疲惫?那么,本文将为你介绍一种高效、易用的方法——利用PHP和Python编写爬虫程序,...【详细内容】
2023-05-09  俊俊的生活日记    Tags:PHP   点击:(337)  评论:(0)  加入收藏
站内最新
站内热门
站内头条