{"id":13462303,"url":"https://github.com/soliphp/process","last_synced_at":"2026-01-16T00:34:01.946Z","repository":{"id":57055262,"uuid":"147339006","full_name":"soliphp/process","owner":"soliphp","description":"Simple multi-process manager for PHP, based on pcntl and posix.","archived":false,"fork":false,"pushed_at":"2019-07-24T13:55:33.000Z","size":14,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-09T02:10:49.976Z","etag":null,"topics":["multi-process","php","soliphp"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soliphp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-04T11:58:19.000Z","updated_at":"2019-07-24T13:55:35.000Z","dependencies_parsed_at":"2022-08-24T03:41:01.835Z","dependency_job_id":null,"html_url":"https://github.com/soliphp/process","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soliphp%2Fprocess","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soliphp%2Fprocess/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soliphp%2Fprocess/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soliphp%2Fprocess/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soliphp","download_url":"https://codeload.github.com/soliphp/process/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245382126,"owners_count":20606157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["multi-process","php","soliphp"],"created_at":"2024-07-31T12:00:44.214Z","updated_at":"2026-01-16T00:34:01.911Z","avatar_url":"https://github.com/soliphp.png","language":"PHP","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"Soli Process\n------------\n\n基于 pcntl 和 posix 扩展，简单的 PHP 多进程管理类库。\n\n## 依赖\n\n- Unix-like\n- PHP 5.0+\n- ext-pcntl\n- ext-posix\n\n`注：信号处理部分需要 PHP 7.1+`\n\n\n## 安装\n\n使用 `composer` 进行安装：\n\n    composer require soliphp/process\n\n\n## 快速使用\n\n    \u003c?php\n\n    use Soli\\Process;\n\n    include __DIR__ . \"/vendor/autoload.php\";\n\n    $job = function ($worker) {\n        while (1) {\n            echo \"Hello world, master pid: {$worker-\u003emasterPid}, worker pid: {$worker-\u003eworkerPid}, worker id: {$worker-\u003eid}\\n\";\n            sleep(1);\n        }\n    };\n\n    $proc = new Process();\n    $proc-\u003ename = 'soli process test';\n    $proc-\u003ecount = 2;\n    $proc-\u003edaemonize = 0;\n    $proc-\u003elogFile = '/tmp/soli_process.log';\n\n    $proc-\u003esetJob($job);\n\n    $proc-\u003estart();\n\n\n## 进程结构\n\n`Soli\\Process` 使用 Master-Worker 进程模型：\n\n                [ master ]\n                /   |   \\\n             /      v      \\\n    [Worker1]   [Worker2]   [WorkerN]\n\nmaster 进程 fork worker 进程，在 PHP 7.1+ 下 master 进程还会接收终止信号传递给 worker 进程执行退出。\n\n## 自动补充退出的进程\n\n如程序出现异常或其他情况导致进程退出，默认会自动补充进程，且保持对应的 $worker-\u003eid 不变。\n\n如果不想自动补充退出的进程，可以设置 `$process-\u003erefork = false;`\n\n\n## 函数列表\n\n### setJob\n\n设置 worker 进程需要执行的任务。\n\n    Process-\u003esetJob(callable $job)\n\n关于 callable 类型参见[官方文档]。\n\n如这里使用匿名函数定义 job，输出一条信息退出进程：\n\n    $proc = new Process();\n\n    $proc-\u003esetJob(function ($worker) {\n        echo \"Hello world, master pid: {$worker-\u003emasterPid}, worker pid: {$worker-\u003eworkerPid}, worker id: {$worker-\u003eid}\\n\";\n    });\n\n`在 job 回调参数中会返回当前 worker 进程的 $worker 实例`，通过这个 $worker 实例可以获取以下[属性列表]中的中的属性。\n\n### start\n\n启动进程，将根据设置的 `count` 启动相应个 worker 进程。\n\n    Process-\u003estart()\n\n\n## 属性列表\n\n### id\n\n当前 worker 进程的编号，编号范围：[0, $worker-\u003ecount - 1]。\n\n`可在 job 回调中使用`。\n\n### masterPid\n\n当前 master 进程 PID。\n\n`可在 job 回调中使用`。\n\n### workerPid\n\n当前 worker 进程 PID。\n\n`可在 job 回调中使用`。\n\n### name\n\n当前 master/worker 进程的名称，只支持 Linux。\n\n执行设置进程名称时：\n\nmaster 进程会自动在其后追加 master 文本，最终的进程名称为 `$name master`；\n\nworker 进程会自动在其后追加 worker 文本，最终的进程名称为 `$name worker`。\n\n### count\n\n设置启动的 worker 进程数，默认为 1\n\n### daemonize\n\n是否将程序作为守护进程运行。\n\n启用守护进程后，标准输出和错误会被重定向到 `logFile`；\n\n如果未设置 `logFile`，将重定向到 `/dev/null`，所有打印到屏幕的信息都会被丢弃。\n\n### logFile\n\n运行期发生的异常信息、进程的终止信息等会记录到这个文件；\n\n启用守护进程后，所有打印到屏幕的信息也都会写入到这个文件。\n\n### refork\n\nworker 进程退出后是否自动补充新的进程，`默认为 true，自动补充新的进程`。\n\n如果不想自动补充退出的进程，可以设置 `refork` 为 `false;`\n\n\n## 信号处理\n\n信号处理部分使用了 [pcntl_async_signals] 需要 `PHP 7.1+` 支持。\n\nmaster 进程支持接收 `SIGINT`, `SIGTERM` 终止信号，master 进程接收到终止信号后向所有 worker\n进程发送相应的终止信号，worker 进程接收到终止信号后执行退出操作。\n\n我们可以通过 `kill` 命令发送信号：\n\n    kill -SIGINT \u003cmaster pid\u003e\n    kill -SIGTERM \u003cmaster pid\u003e\n\n也可以直接通过信号所对应的数字参数：\n\n    kill -2 \u003cmaster pid\u003e\n    kill -15 \u003cmaster pid\u003e\n\n`SIGINT` 即为在终端按下的 `CTRL + C`。\n\n注：如果使用 `kill -9` 即 `kill -SIGKILL` 对 master\n进程发送终止信号，master 进程会立即终止，并不会再向 worker\n进程发送终止信号，所以如果是要通过 master 进程终止所有 worker 进程，建议使用\n`kill -15` 终止所有 worker 进程。\n\n\n低于 PHP 7.1 可以使用以下命令终止所有 worker 进程，注意替换为你的 \"process name\"：\n\n    ps aux | grep \"process name\" | grep -v grep | awk '{ print $2 }' | xargs kill -9\n\n\n## License\n\nMIT Public License\n\n\n[pcntl_async_signals]: http://php.net/pcntl_async_signals\n[官方文档]: http://php.net/callable\n[属性列表]: #属性列表\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoliphp%2Fprocess","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoliphp%2Fprocess","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoliphp%2Fprocess/lists"}