KalonDaemon - 守护进程PHP版

PHP实现守护进程(附完整源码) 阅读详情

声明:这篇文章是我09年的时候发表在自己之前的BLOG上的,属于原创内容,现在将文章转移到这里。

守护进程也称精灵进程(daemon),是生存期较长的一种进程。它们常常用在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX类操作系统有很多的守护进程,它们执行日常事务活动。

目前有大量的web站点基与PHP开发,业务逻辑都是由PHP来实现,很多时候我们也需要一个PHP的daemon来做一些日常事务,例如我们想每隔一个小时统计一下数据库中的某项数据,每天定期的执行一些备份或则监控任务。这些任务在apache模块的web环境下实现比较困难而且容易引发很多问题。
这里我介绍一款我自己写的PHP5版的daemon类 - KalonDaemon.   ^_^  现在和大家一起分享。

概要:
    KalonDaemon是一款PHP5的daemon类,我们在PHP代码中可以直接包含并且使用,KalonDaemon工作在cli sapi下( command line interface),它能把一个普通的PHP进程变成一个守护进程。
使用方式:
  在PHP脚本中包含了KalonDaemon设置好参数然后调用start()方法。然后我们在命令行下用PHP cli执行脚本,比如cli sapi路径为 /usr/local/bin/php,   我们编写的程序路径 /home/test/mydaemon.php,那么我们用以下方式运行程序:          /usr/local/bin/php  /home/test/mydaemon.php   根据需要可以在后面添加别的参数。
工作流程:
KalonDaemon遵循大部分unix类系统下的守护进程编程规则,主要工作流程如下:
1. 调用pcntl_fork,然后使父进程退出(exit).这样做实现如下几点:第一,如果该守护进程是作为一条shell命令启动,那么父进程终止使得 shell认为这条命令已经执行完毕;第二,子进程继承父进程的进程组ID,但是具有一个新的进程ID,这就保证了子进程不是一个进程组的组长,这对于下面要做的posix_setsid调用是必要的前提条件。
2.调用posix_setsid以创建一个新的会话,这样新进程就成为了新会话的首进程,同时是新进程组的组长进程,而且没有控制终端。
3.设置进程信号回调函数,方便我们用其它进程对守护进程进行控制。

 

以下是mydaemon.php的源码:

 

 

在命令行下执行:

/path/to/phpcli/php  mydaemon.php start

 

输出如下信息:

Daemon started with pid 8976...
running.

说明守护进程已经开始运行,进程号为8976,当然一般情况进程号每次都会不一样。

 

由于mydaemon.php中有一个死循环,每次循环会睡眠1000秒,所以进程永远不会终止。

mydaemon.php中为守护进程注册了两个信号句柄,信号SIGUSR1对应函数myHandler1(), 信号SIGUSR2对应myHandler2(),我们可以通过kill命令给进程发送这两个信号来唤醒进程。

 

kill -SIGUSR2 8976

输出信息如下:

This handler2 works.
running.

说明睡眠中的进程被唤醒,并且执行了myHandler2()函数,然后再次进入了循环。

 

 

当我们需要终止守护进程的时候,可以用以下命令:

/path/to/phpcli/php  mydaemon.php stop

输出信息如下:

Daemon stopped with pid 8976...

这样守护进程就终止了。

 

这样的特性可以在某些应用场景非常有用,比如服务器在接受到一些上传的数据之后,需要唤醒守护进程来处理这些数据。守护进程可以长期出去睡眠状态等待,当数据到来之后,发送信号唤醒守护进程,守护进程马上开始处理这些数据。这样要比定期的轮询效率高很多,而且不会有延迟现象。

 

 

KalonDaemon.php

 

nginx+php-cgi 进程守护工具 本工具为易语言编写,可能有误报,请自行辨识。 nginx+php 在 Windows 环境下的进程守护工具, 防止连接数达到上限后 php-cgi 进程退出而导致服务终止。 修改配置 Web.ini: nginx_dir => 填写 nginx.exe 所在目录 php_cgi_dir => 填写 php-cgi.exe 所在目录 php_cgi_start => 填写 php-cgi 启动参数及端口 php_cgi_num => 填写同时运行 php-cgi 的个数 其他使用默认配置即可 工具简陋,原本供自己使用,现方便有相同需求的人。 压缩包内有邮箱,有疑问可发邮件。 立即下载

相关推荐

php实现简单的守护进程创建、开启与关闭操作

主要介绍了php实现简单的守护进程创建、开启与关闭操作,结合实例形式分析了基于pcntl扩展的php守护进程类定义、启动及关闭等相关操作技巧,需要的朋友可以参考下

PHP后台守护进程的实现方式(Linux环境)

1.创建 test.php 文件 <?php while (true) { try { $content=mt_rand(1,200)."\n"; $file='./test.txt'; if($f = file_put_contents($file, $content,FILE_APPEND)){ } // echo file_get_contents($file); } catch (\Excepti

qq_42982453的博客 822

MPC模型预测控制实战:从理论到代码实现(Python示例)

本文详细介绍了MPC模型预测控制的实战应用,从理论到Python代码实现。通过构建系统模型、预测方程、优化问题及约束处理,展示了如何实现一个完整的MPC控制器。文章还提供了水箱液位控制的应用案例,帮助读者掌握MPC在工业控制中的实际应用。

weixin_42653691的博客 460

php 手写一个完美的守护进程

上期我们详细学习了会话的概念以及用法,会话,进程组,终端的理解对本篇讲述的守护进程极其重要,如还不理解相关概念建议翻看我往期关于会话,进程组,终端文章。守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。并且不跟任何的控制终端关联,如果想让某个进程不因为用户或中断或其他变化而影响,那么就必须把这个进程变成一个守护进程。常见的守护进程包括系统日志进程syslogd、 we

专注于php高级知识分享 1653

2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇

我们可以看到,目前配置基本完成了,现在有两个错,一个是Chrome没安装,这个自己安装就可以了,如果不需要WEB测试也不影响开发,另一个是Simulator还没安装,这个主要是安装的时间太长了,也就是上面的这一步。这里要注意,这个下载安装会比较慢,有的载会特别卡造成安装失败,最好的办法是挂一个VPN,保证安装完成,不过这个可以在以后单独进行安装。至此,基本的安装完毕,好多人会以为Xcode就OK了,其实还没有,我们还缺少命令行工具包,这个在安装完Flutter以后进行设置。

weixin_48803304的博客 1412

训练AI:从数据收集到模型部署的完整指南

如果你刚开始接触AI,建议先学习一些基础的编程和机器学习知识,还可以使用现成的AI平台和工具来帮助你训练AI模型。在这篇文章中,我们将详细探讨从数据收集到模型部署的完整步骤,并提供一些有用的技巧和工具,以帮助你成功地训练自己的AI模型。在收集数据时,你需要从可靠的数据源(如数据仓库、数据集市、API接口)获取数据,确保数据的准确性和完整性。常用的划分比例是70%的数据集用于训练模型、15%的数据集用于验证模型,5%的数据集用于超参数调整,最后10%的数据集用于测试模型的性能。测试数据集用于测试模型的性能。

a_wsnd的博客 4166

php写守护进程(Daemon)

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。php也可以实现守护进程的功能。   1、基本概念     进程             每个进程都有一个父进程,子进程退出,父进程能得到子进程退出的状态。     进程组             每个进程都属于一个进

亿光年 3万+

别再乱删文件了!修复Print Spooler服务自动停止的3个关键检查点(附Win10/Win11实测)

本文深入解析Windows系统中Print Spooler服务自动停止的常见原因及修复方法。从第三方驱动冲突、权限与服务依赖关系到打印队列积压,提供3个关键检查点的详细排查步骤,帮助用户彻底解决打印服务异常问题,适用于Win10/Win11系统。

weixin_31569671的博客 675

PHP怎么守护进程运行php脚本

一、使用php代码来实现守护进程 需要用到pcntl扩展,可以通过php -m命令查看是否已安装pcntl扩展。 如果安装了pcntl扩展,但是pcntl函数被禁用的话,也是无法使用的。需要在php.ini中去掉,打开“php.ini”配置文件;然后查找字符“disable_functions”,将pcntl开头的函数删掉。 新建一个Daemon.php,代码如下: <?php class Daemon { private $pidfile; function __c

withoutfear的博客 2603

从零搭建AMESim与Matlab/Simulink联合仿真环境(2024版软件配置详解)

本文详细介绍了2024年最新版AMESim与Matlab/Simulink联合仿真环境的搭建与配置方法。从软件安装顺序、路径设置到编译器配置,逐步指导如何实现高效联合仿真,特别强调了版本兼容性和环境变量设置等关键细节,帮助工程师快速解决常见问题并优化仿真性能。

weixin_42538752的博客 735

别再死记硬背了!用Python+Matlab/Simulink手把手带你理解PID控制器的‘稳、快、准’

本文通过Python编程和Matlab/Simulink仿真,深入解析PID控制器的‘稳、快、准’三大核心指标,帮助读者直观理解PID控制的实现原理与参数整定技巧。内容涵盖经典控制理论和自动控制原理,提供实战案例和高级调参技巧,适合工业自动化领域的学习者和工程师。

weixin_42551227的博客 369

PHP守护进程创建、开启与关闭操作教程

本文实例讲述了php实现简单的守护进程创建、开启与关闭操作。分享给大家供大家参考,具体如下

CRMEB小程序商城的博客 838

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 683

php守护进程

注:转载自 http://blog.youkuaiyun.com/phpkernel/article/details/6458991 守护进程也称精灵进程(daemon),是生存期较长的一种进程。它们常常用在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX类操作系统有很多的守护进程,它们执行日常事务活动。 目前有大量的web站点基与PHP开发,业务逻辑都

卡卡 1759

嵌套学习 (Nested Learning, NL):赋予AI持续学习能力的革命性范式

嵌套学习(Nested Learning, NL)的核心哲学在于彻底颠覆传统深度学习中将模型架构(Architecture)与优化算法(Optimization)视为两个独立组件的“扁平化”视角 。传统方法通常将神经网络的结构设计和其训练过程分离开来,模型架构是预先定义好的静态蓝图,而优化算法(如SGD、Adam)则是一个外部的、统一的规则引擎,负责在训练期间调整模型参数 。这种分离的视角隐藏了模型内部不同组件之间复杂的梯度流和动态更新过程,将整个学习系统视为一个单一层次的优化问题。然而,嵌套学习范式提出,

步子哥的博客 488

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

PHP守护进程类 -- KalonDaemon

守护进程也称精灵进程(daemon),是生存期较长的一种进程。它们常常用在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX类操作系统有很多的守护进程,它们执行日常事务活动。 目前有大量的web站点基与PHP开发,业务逻辑都是由PHP来实现,很多时候我们也需要一个PHP的daemon来做一些日常事务,例如我们想每隔一个小时统计一下数据库中的某项数据

老鹰之歌的学习笔记 2865

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

php守护进程处理并发,PHP的守护进程。可以用于列队处理一些需要延迟处理的功能...

/*** Kalon Daemon -> A Unix Daemon for PHP5* This is a free daemon tool, you can use it anyway you like.** NOTICE:* 1:This tool must run in cli sapi, any other sapis will cause a* KalonDaemon...

weixin_36013428的博客 141

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

PHP的守护进程。可以用于列队处理一些需要延迟处理的功能

<br />/**<br /> * Kalon Daemon -> A Unix Daemon for PHP5<br /> *     This is a free daemon tool, you can use it anyway you like.<br /> *<br /> * NOTICE:<br /> * 1:This tool must run in cli sapi, any other sapis will cause a<br /> *   KalonDaemonException t

尚兴跃的备忘录 1015

php 如何守护进程_PHP 编写守护进程

PHP 创建守护进程进程根据状态可以分为三种进程,守护进程,僵尸进程,孤儿进程。今天我们着重来分析下守护进程。简介守护进程 (daemon) 是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。创建步骤创建子进程,终止父进程由于守护进程是脱离控制终端的,因此首先创建子进程,终止父进程,使得...

weixin_31002061的博客 1307

深入理解 PHP 高性能框架 Workerman 守护进程原理

守护进程顾名思义就是能够在后台一直运行的进程,不会霸占用户的会话终端,脱离了终端的控制。相信朋友们对这东西都不陌生了吧?如果连这个概念都还不能理解的话,建议回炉重造多看看 Linux 进程管理相关的基础知识。

A码农先森的专栏 886

php-fpm 如何进程守护,保证进程不死?

PHP-FPM 通过 master 进程管理多个 worker 进程,每个 worker 进程都是一个独立的 PHP 解析器。为了保证 PHP-FPM 进程的稳定运行,需要进行进程守护。Supervisor 是一个进程管理器,可以将 PHP-FPM 的 master 进程和所有的 worker 进程作为子进程运行,并在进程崩溃时自动重启。总之,为了保证 PHP-FPM 进程的稳定运行,需要进行进程守护。这些工具可以自动重启 PHP-FPM 进程,并监控进程的运行状态,保证进程不死。

wywinstonwy的专栏 945

在宝塔上执行php命令行(新)

由于堡塔应用管理器下架,需要下载另一个进程守护软件进程守护管理器 3.0.3来代替原来的功能

weixin_58508879的博客 2321

关于PHP的进程

在Laravel项目中启动PHP后台进程时,可能会出现日志文件权限问题。当以root用户启动进程时,创建的日志文件会限制PHP-FPM(apache用户)的写入权限。解决方案有两种:1)将进程日志与业务日志分开存储;2)以apache用户身份启动进程(使用sudo -u apache nohup php artisan task:...命令)。后一种方法确保日志文件所有权一致,避免权限冲突。

smallfishone的博客 323

php进程守护进程,PHP 实现守护进程

守护进程守护进程作为一种常驻进程服务,很常见,例如 PHP-FPM, NGINX,REDIS,都需要一个父进程来支持整个服务。但是用 PHP 编写守护进程不多见,今天就来用 PHP 来实现一下。步骤fork 子进程父进程退出设置新的会话重置文件掩码关闭标准输入输出实现我们对着以上的步骤来实现,在这之前需要 pcntl 和 posix 扩展,请确保安装了。function daemon() {$pi...

weixin_42363854的博客 263
上一篇: 神秘的变量名特性
下一篇: KalonQue文档
phpkernel
博客等级 码龄16年 96粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值