[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Управление процессами
Rand
Приветствую!

Нужен демон который будет создавать ограниченное число php-процессов (воркеров) и следить за тем, чтобы они работали корректно (убивать зависшее, перезапускать их и т.д.). Есть готовые решения или намного проще написать свой велосипед? И если писать свой через что это делать (pcntl?)
Rand
Неужели на форуме нет разбирающихся в этой теме людей? Ладно, пока что смотрю в сторону наследования от System_Daemon. Теперь вопрос такой: почему не работает pcntl_signal?
<?php
error_reporting(E_ALL);

if ($pid = pcntl_fork()) {
if ($pid == -1) {
echo 'error' . PHP_EOL;
die();
}

echo 'chield ' . $pid . ' is created' . PHP_EOL;

pcntl_signal(SIGCHLD, function($sig) {
echo 'handler: ' . $sig;
});

while (!$sig = pcntl_sigwaitinfo([SIGCHLD]));

echo 'sigwait: ' . $sig . PHP_EOL;

pcntl_signal_dispatch();

echo 'parrent: end' . PHP_EOL;
} else {
sleep(2);
echo 'chield: end' . PHP_EOL;
}
Вывод:
Цитата
chield 6943 is created
chield: end
sigwait: 17
parrent: end
Rand
Вот так обработчик срабатывает:
<?php
error_reporting(E_ALL);

if ($pid = pcntl_fork()) {
if ($pid == -1) {
echo 'error' . PHP_EOL;
die();
}

echo 'chield ' . $pid . ' is created' . PHP_EOL;

pcntl_signal(SIGCHLD, function($sig) {
echo 'handler: ' . $sig;
});

while (1) {
sleep(1);
pcntl_signal_dispatch();
}

echo 'parrent: end' . PHP_EOL;
} else {
sleep(2);
echo 'chield: end' . PHP_EOL;
}
Выходит, что pcntl_sigwaitinfo устанавливает себя в качестве хендлера для всех сигналов во втором параметре, а стека хендлеров нет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.