php实现 master-worker 守护多进程模式的实例代码
程序员文章站
2022-06-14 14:28:15
具体代码如下所示:
具体代码如下所示:
<?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
总结
以上所述是小编给大家介绍的php实现 master-worker 守护多进程模式的实例代码,希望对大家有所帮助