protected static function createChildrenProcess()
{
$pid = pcntl_fork();
if ($pid > 0) {
$status = self::getStatus();
$status['pid'][$pid] = $pid;
isset($status['task']) || ($status['task'] = []);
file_put_contents(self::$status, '<?php return ' . var_export($status, true) . ';', LOCK_EX);
} elseif ($pid === 0) {
self::setProcessName('worker');
while (true) {
pcntl_signal_dispatch();
$status = self::getStatus();
if ($status['task']) {
foreach ($status['task'] as $key => $task) {
if (time() > $task['last_runtime'] + $task['frequency']) {
$status['task'][$key]['last_runtime'] = time();
file_put_contents(self::$status, '<?php return ' . var_export($status, true) . ';', LOCK_EX);
call_user_func($task['task']);
}
}
sleep(3);
} else {
sleep(5);
}
}
} else {
exit('create process error');
}
}