【多进程】php实现 master-worker 守护多进程模式
时间:2022-06-26
本文章向大家介绍【多进程】php实现 master-worker 守护多进程模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<?php
class Worker{
public static $count = 2;
public static function runAll(){
static::runMaster();
static::moniProcess();
}
//开启主进程
public static function runMaster(){
//确保进程有最大操作权限
unmask(0);
$pid = pcntl_fork();
if($pid > 0){
echo "主进程进程 $pid n";
exit;
}else if($pid == 0){
if(-1 === posix_setsid()){
throw new Exception("setsid fail");
}
for ($i=0; $i < self::$count; $i++) {
static::runWorker();
}
@cli_set_process_title("master_process");
}else{
throw new Exception("创建主进程失败");
}
}
//开启子进程
public static function runWorker(){
unmask(0);
$pid = pcntl_fork();
if($pid > 0){
// echo "创建子进程 $pid n";
}else if($pid == 0){
if(-1 === posix_setsid()){
throw new Exception("setsid fail");
}
@cli_set_process_title("worker_process");
while(1){
sleep(1);
}
}else{
throw new Exception("创建子进程失败");
}
}
//监控worker进程
public function moniProcess(){
while( $pid = pcntl_wait($status)){
if($pid == -1){
break;
}else{
static::runWorker();
}
}
}
}
Worker::runAll();
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18200 3076 pts/0 Ss+ 14:05 0:00 bash
root 6 0.0 0.0 18208 3252 pts/1 Ss 14:06 0:00 bash
root 19 0.0 0.0 18204 3248 pts/2 Ss+ 14:11 0:00 bash
root 64 0.0 0.2 348488 8320 ? Ss 15:32 0:00 master_process
root 65 0.0 0.2 348488 8400 ? Ss 15:32 0:00 worker_process
root 66 0.0 0.2 348488 8400 ? Ss 15:32 0:00 worker_process
root 67 0.0 0.0 36640 2804 pts/1 R+ 15:32 0:00 ps -aux
执行命令 kill 65,杀死进程 65 则master_process 进程会再自动开启一个子进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18200 3076 pts/0 Ss+ 14:05 0:00 bash
root 6 0.0 0.0 18208 3252 pts/1 Ss 14:06 0:00 bash
root 19 0.0 0.0 18204 3248 pts/2 Ss+ 14:11 0:00 bash
root 64 0.0 0.2 348488 8320 ? Ss 15:32 0:00 master_process
root 66 0.0 0.2 348488 8400 ? Ss 15:32 0:00 worker_process
root 68 0.0 0.1 348488 5796 ? Ss 15:34 0:00 worker_process
root 69 0.0 0.0 36640 2728 pts/1 R+ 15:34 0:00 ps -aux
- 最终版 Reflector v1.0 (+简单的反流程混淆)
- 性能&分布式&NewLife.XCode对无限数据的支持
- ASP.NET MVC下的异步Action的定义和执行原理
- 包学会之浅入浅出Vue.js:结业篇
- 迈克尔•戴尔:人工智能杀手?技术反乌托邦?不存在的
- 你知道吗?多个类多线程环境下静态构造函数的执行顺序
- 云端架构师养成之三:微信也在用的消息队列服务
- 现在 tensorflow和mxnet 很火,是否还有必要学习 scikit-learn 等框架?
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- 改进版CodeTimer及XCode性能测试
- 常见测试术语解析
- 秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
- 开源组件NanUI一周年-使用HTML/CSS/JS来构建.Net Winform应用程序界面
- 邱寒:新零售笔记(四)基于区块链大数据的人工智能
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- centos7卸载自带jdk并安装新的jdk
- 即使不懂单元测试,会用这个工具也够了~
- 统计分布讲解
- 使用PyTorch Lightning自动训练你的深度神经网络
- linux防火墙相关配置命令及操作(centos和ubuntu)
- 带你吃透Spring事务7种传播行为 | Spring第45篇
- Linux如何查看端口被占用情况?Windows如何查看端口被占用情况?
- centos7安装Docker详细步骤(无坑版教程)
- Java的Object类详解(入门必备)
- Java的包机制以及import、static import的用法详解(看这篇就够了)
- AIM2020 Efficient Super Resolution: Methods and Results
- hive的group by与distinct的区别及性能测试比较
- hive的order by操作
- centos安装mysql-server报错:No package mysql-server available.
- Java的内部类详解(结合代码全面分析)