интерфейс командной строки — PHP Daemon игнорирует функцию сна

Я написал скрипт демона в php, который работает на сервере. У меня нет доступа к оболочке, поэтому я выполняю ее, используя функцию popen и CLI

pclose(popen('/usr/bin/php full_path/index.php daemon
start|exit &', 'r'));

Все работает нормально, кроме как игнорирует usleep(5000000)

while (!$this->_sigterm) {
pcntl_signal_dispatch();

// Save the total running children
$processes_running = count($this->_pids);

// See if we are within our defined child limits.
if($processes_running >= $this->_config['max']) {
// Now lets pause.
$this->iterate();
continue; // Restart.
}

// Lets get the next task
if(($task = Tasks::getNextTask()) !== false) {
// Fork process to execute task
$pid = pcntl_fork();
if ($pid == -1) {
exit(1);
} elseif ($pid) {
$this->_pids[$pid] = time();
} else // We are child so lets do it!
{
if (posix_setsid() == -1) {
exit(1);
}

// Child - Execute task
exit(0);
}
}
// Now lets pause.
$this->iterate();
}

Добавлены ссылки на полный предварительный просмотр кода

Полный код демона можно просмотреть здесь: http://pasted.co/ffa1d125

Код, который управляет (запускает / останавливает) демоном: http://pasted.co/e3b575b0

метод iterate состоит в основном из usleep(5000000) функция. Я запускал демон в течение 30 секунд, поэтому я должен был получить максимум 6 итераций. Вместо этого я получил более 600.

Почему он игнорирует функцию сна? Это связано с выполнением CLI? Как заставить демона использовать sleep, чтобы не убить мой процессор?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector