Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/soliphp/process
Simple multi-process manager for PHP, based on pcntl and posix.
https://github.com/soliphp/process
multi-process php soliphp
Last synced: 10 days ago
JSON representation
Simple multi-process manager for PHP, based on pcntl and posix.
- Host: GitHub
- URL: https://github.com/soliphp/process
- Owner: soliphp
- Created: 2018-09-04T11:58:19.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-07-24T13:55:33.000Z (over 5 years ago)
- Last Synced: 2024-07-31T12:07:42.577Z (3 months ago)
- Topics: multi-process, php, soliphp
- Language: PHP
- Size: 13.7 KB
- Stars: 10
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- favorite-link - PHP 的简单多进程管理器,基于 pcntl 和 posix。
README
Soli Process
------------基于 pcntl 和 posix 扩展,简单的 PHP 多进程管理类库。
## 依赖
- Unix-like
- PHP 5.0+
- ext-pcntl
- ext-posix`注:信号处理部分需要 PHP 7.1+`
## 安装
使用 `composer` 进行安装:
composer require soliphp/process
## 快速使用
masterPid}, worker pid: {$worker->workerPid}, worker id: {$worker->id}\n";
sleep(1);
}
};$proc = new Process();
$proc->name = 'soli process test';
$proc->count = 2;
$proc->daemonize = 0;
$proc->logFile = '/tmp/soli_process.log';$proc->setJob($job);
$proc->start();
## 进程结构
`Soli\Process` 使用 Master-Worker 进程模型:
[ master ]
/ | \
/ v \
[Worker1] [Worker2] [WorkerN]master 进程 fork worker 进程,在 PHP 7.1+ 下 master 进程还会接收终止信号传递给 worker 进程执行退出。
## 自动补充退出的进程
如程序出现异常或其他情况导致进程退出,默认会自动补充进程,且保持对应的 $worker->id 不变。
如果不想自动补充退出的进程,可以设置 `$process->refork = false;`
## 函数列表
### setJob
设置 worker 进程需要执行的任务。
Process->setJob(callable $job)
关于 callable 类型参见[官方文档]。
如这里使用匿名函数定义 job,输出一条信息退出进程:
$proc = new Process();
$proc->setJob(function ($worker) {
echo "Hello world, master pid: {$worker->masterPid}, worker pid: {$worker->workerPid}, worker id: {$worker->id}\n";
});`在 job 回调参数中会返回当前 worker 进程的 $worker 实例`,通过这个 $worker 实例可以获取以下[属性列表]中的中的属性。
### start
启动进程,将根据设置的 `count` 启动相应个 worker 进程。
Process->start()
## 属性列表
### id
当前 worker 进程的编号,编号范围:[0, $worker->count - 1]。
`可在 job 回调中使用`。
### masterPid
当前 master 进程 PID。
`可在 job 回调中使用`。
### workerPid
当前 worker 进程 PID。
`可在 job 回调中使用`。
### name
当前 master/worker 进程的名称,只支持 Linux。
执行设置进程名称时:
master 进程会自动在其后追加 master 文本,最终的进程名称为 `$name master`;
worker 进程会自动在其后追加 worker 文本,最终的进程名称为 `$name worker`。
### count
设置启动的 worker 进程数,默认为 1
### daemonize
是否将程序作为守护进程运行。
启用守护进程后,标准输出和错误会被重定向到 `logFile`;
如果未设置 `logFile`,将重定向到 `/dev/null`,所有打印到屏幕的信息都会被丢弃。
### logFile
运行期发生的异常信息、进程的终止信息等会记录到这个文件;
启用守护进程后,所有打印到屏幕的信息也都会写入到这个文件。
### refork
worker 进程退出后是否自动补充新的进程,`默认为 true,自动补充新的进程`。
如果不想自动补充退出的进程,可以设置 `refork` 为 `false;`
## 信号处理
信号处理部分使用了 [pcntl_async_signals] 需要 `PHP 7.1+` 支持。
master 进程支持接收 `SIGINT`, `SIGTERM` 终止信号,master 进程接收到终止信号后向所有 worker
进程发送相应的终止信号,worker 进程接收到终止信号后执行退出操作。我们可以通过 `kill` 命令发送信号:
kill -SIGINT
kill -SIGTERM也可以直接通过信号所对应的数字参数:
kill -2
kill -15`SIGINT` 即为在终端按下的 `CTRL + C`。
注:如果使用 `kill -9` 即 `kill -SIGKILL` 对 master
进程发送终止信号,master 进程会立即终止,并不会再向 worker
进程发送终止信号,所以如果是要通过 master 进程终止所有 worker 进程,建议使用
`kill -15` 终止所有 worker 进程。低于 PHP 7.1 可以使用以下命令终止所有 worker 进程,注意替换为你的 "process name":
ps aux | grep "process name" | grep -v grep | awk '{ print $2 }' | xargs kill -9
## License
MIT Public License
[pcntl_async_signals]: http://php.net/pcntl_async_signals
[官方文档]: http://php.net/callable
[属性列表]: #属性列表