Поддержка функций управления процессом в РНР реализует создание процесса в
стиле Unix, выполнение программы, обработку сигналов и окончание процесса.
Управление процессом не должно включаться в окружении
web-сервера, и могут быть неожиданные результаты, если функции управления
процессом будут выполняться внутри среды web-сервера.
Эта документация призвана разъяснить общие принципы использования каждой из
функций управления процессом. Детальную информацию об управлении процессом в Unix
мы рекомендуем вам найти в вашей системной документации, включая fork(2), waitpid(2)
и signal(2), или в исчерпывающем справочнике, таком как Advanced Programming in the
UNIX Environment, автор W. Richard Stevens (Addison-Wesley).
Поддержка управления процессом в PHP по умолчанию не включена. Вам
необходимо использовать опцию конфигурации --enable-pcntl при компилировании PHP, чтобы включить эту поддержку.
Примечание: в настоящее время этот модуль не работает на не-Unix платформах (Windows).
Следующий список сигналов поддерживается функциями управления процессом.
См. man-страницу signal(7) вашей системной документации о поведении по
умолчанию этих сигналов.
Этот пример разветвляет процесс демона/daemon с обработчиком сигнала.
Пример 1. Управление процессом
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die("could not fork");
} else if ($pid) {
exit(); // мы родитель
} else {
// мы потомок
}
// отсоединиться от терминала управления
if (!posix_setsid()) {
die("could not detach from terminal");
}
// настроить обработчики сигнала
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
// проходить по циклу, выполняя задачи
while(1) {
// здесь делать что-нибудь интересное
}
function sig_handler($signo) {
switch($signo) {
case SIGTERM:
// обработать задачи отключения
exit;
break;
case SIGHUP:
// обработать задачи рестарта
break;
default:
// обработать все другие сигналы
}
}
?>
Содержание
pcntl_exec - выполняет специфицированную программу в пространстве текущего процесса