写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到 NGINXphp-fpm 之类的平滑重启是给进程发送 USR2 信号,然后它就会将当前请求处理完再退出。

但进程是怎样接收信号、处理信号,估计就不是很多人能说清楚了。

- 阅读剩余部分 -

写 PHP CLI 程序的老司机们可能经常会写一些常驻进程,比如消息队列消费者进程,这些进程会一直运行,除非要发版,不然一般不会重启的,所以程序程序是不可能由我们通过 ssh 登录到服务器上通过终端来直接启动的(因为一旦断开 ssh 进程就退出了),常见的做法就是用 systemd 或者 supervisor 来使其成为 守护进程,这样进程就可以一直运行,遇到错误意外退出也能被自动重启。

好学的你可能会思考守护进程到底是怎么实现的?为什么有的程序既可以自己就成为守护进程,又可以通过 systemd 来后台运行?如果不依赖外部,我们的 PHP 程序该怎样变成守护进程呢?

- 阅读剩余部分 -

int*int 说起

int**是什么” 这个问题其实不难。
我们可以递归分析,先看下 int*是什么,嗯?好像还可以继续递归到 int
我们都知道,int是 C 的基础数据类型 整型,而多了个 *int*指向整型变量的指针,那么 int** 是什么就不言自明了,列个表:

C语法释义
int整型
int*指向整型的指针
int**指向指向整型的指针的指针

看到这里,你对 int** 应该有了个初步的认识,但你可能觉得有点绕,没关系,下面我们写一段代码看看:

- 阅读剩余部分 -

最近将 PHP 更新到 8.0 了,顺便也将 Typecho 更新了一下以便适配 PHP 8,再有就是最近经常将博客迁来迁去的,于是用 docker-compose 搞了个 Typecho 的环境,分享给有需要的小伙伴~

https://github.com/YianAndCode/typecho-in-docker

目前主要集成了 php:8.0-fpmnginx:latest,但该环境不包含 MySQL 数据库,不过 PHP 环境已经安装 pdo_mysqlpdo_sqlite 扩展,可以使用 MySQL 或者是 SQLite 数据库