注意:PHP多进程函数pcntl_fork只能在Linux/Unix系统下运行,不支持Windows
if (!function_exists('pcntl_fork')) {
exit('function is not exists');
}
function daemon($func_name, $args, $number){
while(true){
$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
//错误处理;创建子进程失败时返回-1
exit('could not fork');
} else if ($pid) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
static $num = 0;
$num++;
if($num >= $number){
//当进程数量达到一定数量时候,就对子进程进行回收
pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程
$num--;
}
} else {
//子进程得到的$pid为0, 所以这里是子进程执行的逻辑
}
}
}
function worker($args){
//do something
}
daemon('worker',array(1),2);