  | 
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 - возвращает сигнал, который заставляет потомка закончить работу
 
  |   |