PHP Демоны. Как создать ограниченное количество одновременно работающих детей pcntl_fork?
Как создать ограниченное количество одновременно работающих детей pcntl_fork? Есть такой код, по задумке код достает из Redis json с ссылкой и классом, который передается дальше и в ребенке вызывается класс в который передается ссылка и потом в этом классе ссылка скачивается, мне надо чтобы создавалось 50-100 детей, которые будут выполнять это действие, чтобы ускорить процесс. Что я неправильно написал? Сейчас как бы я не менял условия всегда работает одновременно только 1 поток(ребенок). Вопрос в следующем: как правильно ограничить кол-во детей и сделать чтобы скрипт работал сразу в 50-100 потоков? И еще как сделать завершение программы по прохождению всех ссылок?
public function secStart(){
while (true) {
$this->get_link = $this->reds->lpop($this->redlinks);
if ($this->get_link != null) {
$jd_link_class = json_decode($this->get_link, true);
$pid = pcntl_fork();
if ($pid == -1) {
$this->reds->lpush($this->redlinks, $this->get_link);
echo "cant create child, return link to redis " . $this->get_link . PHP_EOL;
die('could not fork');
} else if ($pid) {
$this->liniks[$pid] = $this->get_link;
$this->child[] = $pid;
pcntl_wait($status); //Protect against Zombie children
} else {
$this->isChild = true;
new $jd_link_class['class']($jd_link_class['link']);
exit();
}
while(count($this->child) == 500) {
foreach ($this->child as $chld => $pid) {
if (pcntl_waitpid($pid, $status, WNOHANG)) {
if (pcntl_wifexited($status)) {
echo "All downloaded, process pid = " . $pid . PHP_EOL;
unset($this->child[$chld]);
unset($this->liniks[$pid]);
} else {
$this->reds->lpush($this->redlinks, $this->liniks[$pid]);
echo "not normally exit from child, return link to redis " . $this->liniks[$pid] . PHP_EOL;
unset($this->child[$chld]);
unset($this->liniks[$pid]);
}
}
}
}
}
}
}
}