php-pmd / daemon
PHP CLI 守护进程(clio/clio)
0.0.2
2021-04-27 09:57 UTC
Requires
- php: >=5.6
- ext-pcntl: *
- ext-posix: *
README
基于 Clio 的守护进程。
守护进程类提供了启动和终止守护进程的辅助函数。
安装
composer require php-pmd/daemon
需要 PHP 5.4。这个库是在 POSIX 系统上开发的,旨在在加载了 posix、pcntl 和 sockets 扩展的 POSIX 系统上使用。
Daemon::isRunning($pid)
检查守护进程当前是否正在运行。返回 true 或 false
<?php use PhpPmd\Daemon; if (Daemon::isRunning('/path/to/process.pid')) { echo "daemon is running.\n"; } else { echo "daemon is not running.\n"; }
Daemon::work(array $options, callable $callable)
将 $callable 可调用对象守护进程化。$options 键值数组必须包含 pid 作为 PID 文件的路径
<?php use PhpPmd\Daemon; if (Daemon::isRunning('/path/to/process.pid')) { echo "daemon is already running.\n"; } else { Daemon::work(array( 'pid' => '/path/to/process.pid', // required 'stdin' => '/dev/null', // defaults to /dev/null 'stdout' => '/path/to/stdout.txt', // defaults to /dev/null 'stderr' => '/path/to/stderr.txt', // defaults to php://stdout ), function($stdin, $stdout, $stderr) { // these parameters are optional while (true) { // do whatever it is daemons do sleep(1); // sleep is good for you } } ); echo "daemon is now running.\n"; }
PID 文件是一个普通的文本文件,其唯一内容是进程 ID。如果它不存在,库将自动创建它。强烈建议在代码中添加对 sleep 的调用以减轻系统负载。
Daemon::kill($pid, $force = false, $delete = false)
$force
如果 force 的值为 true,则 sig 为 SIGKILL
如果 force 的值为 false,则 sig 为 SIGTERM
$delete
在终止后删除 PID 文件的标志
终止守护进程
<?php use PhpPmd\Daemon; if (Daemon::isRunning('/path/to/process.pid')) { echo "killing running daemon ...\n"; if (Daemon::kill('/path/to/process.pid')) { echo "daemon killed.\n"; } else { echo "failed killing daemon.\n"; } } else { echo "nothing to kill.\n"; }
如果第二个参数设置为 true,则此函数将向进程发送 SIGKILL。如果设置为 false,则此函数将向进程发送 SIGTERM。
如果第三个参数设置为 true,则此函数将在成功发送终止信号后尝试删除 PID 文件。
致谢
文本颜色和样式指定符完全取自 Stefan Walk 的 PEAR 的 Console_Color 类。守护进程类受到了 Andy Thompson 在 在 POSIX 系统上守护进程化 PHP CLI 脚本 的博客文章的极大启发。
许可证
Clio 在 MIT 许可证 下发布。