<?php
const TASK_NUM = 10; // 任务数
const MAX_PROCESS = 3; // 最大进程数量,并发控制
$running = 0; // 记录正在运行的子进程数
for ($i = 0; $i < TASK_NUM; $i++) {
$pid = pcntl_fork(); // 开启新进程
if ($pid == -1) {
die("could not fork"); // 开启失败
} elseif ($pid) {
// 父进程逻辑
// echo "父进程逻辑 \n";
$running++; // 进程数+1
if ($running >= MAX_PROCESS) { // 子进程开启数量达到上限
pcntl_wait($status); // 等待有子进程退出
$running--; // 有子进程退出,进程数-1
}
// echo "父进程逻辑end \n";
} else {
// 子进程逻辑
echo "子进程逻辑 \n";
$ss = rand(1, 20);
echo "child:$i, sleep $ss second... \n";
sleep($ss);
echo "child:$i, finish sleep.\n";
exit(0); // 子进程逻辑结束,注意退出点
}
}
// 等待所有子进程都结束
while ($running) {
pcntl_wait($status);
$running--;
}
echo "done.\n\n";
php 多进程fork
PHP技术
544
0
0
2023-02-01
登录后可点赞和收藏
登录后可点赞和收藏