如何实现PHP服务器的平滑关闭或重启操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1423个文字,预计阅读时间需要6分钟。
目录前言原理阻塞信号处理信号拼接起来思考前言写过CLI的老司机可能会遇到这样一个问题:在需要更新程序的时候,如何才能安全地关闭老进程?
问题:在需要更新程序的时候,我应该如何才能安全地关闭老进程?
解决方案:你可能想到使用NGINX等工具。
目录
- 前言
- 原理
- 阻塞信号
- 处理信号
- 拼起来
- 思考
前言
写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到NGINX、php-fpm之类的平滑重启是给进程发送USR2信号,然后它就会将当前请求处理完再退出。
但进程是怎样接收信号、处理信号,估计就不是很多人能说清楚了。
原理
要实现平滑关闭/重启不难,这里先讲解两个知识点:
阻塞信号
当我们的程序正在处理一个任务的时候,你肯定不希望它中途被终止,比如说你在执行一个数据库事务,肯定不希望事务还没被提交进程就被终止了。
本文共计1423个文字,预计阅读时间需要6分钟。
目录前言原理阻塞信号处理信号拼接起来思考前言写过CLI的老司机可能会遇到这样一个问题:在需要更新程序的时候,如何才能安全地关闭老进程?
问题:在需要更新程序的时候,我应该如何才能安全地关闭老进程?
解决方案:你可能想到使用NGINX等工具。
目录
- 前言
- 原理
- 阻塞信号
- 处理信号
- 拼起来
- 思考
前言
写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到NGINX、php-fpm之类的平滑重启是给进程发送USR2信号,然后它就会将当前请求处理完再退出。
但进程是怎样接收信号、处理信号,估计就不是很多人能说清楚了。
原理
要实现平滑关闭/重启不难,这里先讲解两个知识点:
阻塞信号
当我们的程序正在处理一个任务的时候,你肯定不希望它中途被终止,比如说你在执行一个数据库事务,肯定不希望事务还没被提交进程就被终止了。

