您的位置 首页 php

php创建恒定数量的进程(pcntl学习二)

code如下:

<?php
$num = 10; // 进程数量
$maxLife = 10; // 进程的最大存活时间
$minLife = 1; // 进程最小的存活时间
$child = []; //子进程容器
function genarate($min = 3, $max = 30)
{
 $pid = pcntl_fork();
 if($pid == -1) {
 return 0;
 } else if ($pid == 0) {
 $life = rand($min, $max);
 sleep($life); // 模拟进程生命
 $id = getmypid();
 echo 'child '.$id. ' gone'.PHP_EOL;
 exit(0);
 } else if ($pid > 0) {
 return $pid;
 }
 return 0;
}
while(true) {
 if (count($child) < $num) {
 $pid = genarate($minLife, $maxLife);
 echo 'child '.$pid.' born '.PHP_EOL;
 if($pid) {
 $child[] = $pid;
 }
 } else if ( count($child) > $num ) {
 $pid = array_pop($child);
 posix_kill($pid,SIGINT);
 echo 'child '.$pid.' killed'.PHP_EOL;
 }
  foreach ($child as $k => $pid) {
 $res = pcntl_waitpid($pid,$status,WNOHANG);
 if($res == -1 || $res > 0 ) {
 unset($child[$k]);
 }
 }
} 

当$num=1,$maxLife=1,$minLife=1时

运行结果如下

只要进程一挂掉,就会里面创建新的进程。再通过pcntl_signal注册一个捕获信号的回调方法,应该就可以了。

文章来源:智云一二三科技

文章标题:php创建恒定数量的进程(pcntl学习二)

文章地址:https://www.zhihuclub.com/77871.shtml

关于作者: 智云科技

热门文章

网站地图