Unix信号在PHP中的应用(二)– 多进程管理工具

上一节中介绍了信号的基本处理方式。在本节中,会结合实际的例子来具体的说明。

本节中的示例来自用PHP实现的一个多进程管理工具,项目地址:https://github.com/bruceding/PHP-Thread。此工具基于pcntl,通过一个主进程(master)管理多个子进程,并且子进程的数量是可以动态变化的。

当主进程fork子进程的时候,我们需要对信号进行处理。

上面代码共处理了五种信号。当子进程执行完成调用exit时,会产生SIGCHLD信号,这时,主进程应该捕获此信号进行处理。调用pcntl_waitpid等函数。否则,子进程会变成僵尸进程,子进程的结构还会存在于内存中,造成资源浪费。

对于SIGINT,SIGQUIT,SIGHUP,SIGTERM信号,主进程进行了清理操作。

对于子进程传递SIGTERM信号,让其平滑关闭。

在子进程中也进行了信号处理。

对于SIGINT,SIGHUP,SIGQUIT信号子进程选择了忽略。对于SIGTERM信号,子进程调用stop函数。

此条目发表在PHP分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。