|
LXXXI. Функции управления процессом
Поддержка функций управления процессом в РНР реализует создание процесса в
стиле 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) вашей системной документации о поведении по
умолчанию этих сигналов.
Таблица 1. Поддерживаемые сигналы
SIGFPE
|
SIGCONT
|
SIGKILL
|
SIGSTOP
|
SIGUSR1
|
SIGTSTP
|
SIGHUP
|
SIGUSR2
|
SIGTTIN
|
SIGINT
|
SIGSEGV
|
SIGTTOU
|
SIGQUIT
|
SIGPIPE
|
SIGURG
|
SIGILL
|
SIGALRM
|
SIGXCPU
|
SIGTRAP
|
SIGTERM
|
SIGXFSZ
|
SIGABRT
|
SIGSTKFLT
|
SIGVTALRM
|
SIGIOT
|
SIGCHLD
|
SIGPROF
|
SIGBUS
|
SIGCLD
|
SIGWINCH
|
SIGPOLL
|
SIGIO
|
SIGPWR
|
SIGSYS
|
|
|
Этот пример разветвляет процесс демона/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 - выполняет специфицированную программу в пространстве текущего процесса
-
pcntl_fork - разветвляет текущий процесс
-
pcntl_signal - инсталирует обработчик сигнала
-
pcntl_waitpid - ожидает или возвращает статус разветвлённого потомка
-
pcntl_wexitstatus - возвращает return-код завершённого потомка
-
pcntl_wifexited - возвращает
TRUE
, если статус-код представляет успешный выход
-
pcntl_wifsignaled - возвращает
TRUE
, если статус-код представляет окончание по сигналу
-
pcntl_wifstopped - возвращает
TRUE
, если дочерний процесс в данный момент остановлен
-
pcntl_wstopsig - возвращает сигнал, который заставляет потомка остановиться
-
pcntl_wtermsig - возвращает сигнал, который заставляет потомка закончить работу
|
|