Forum und email

Funciones de Control de Procesos

Introducción

El soporte de Control de Procesos en PHP implementa el estilo Unix de creaci n de procesos, ejecuci n de programa, administraci n de señales y finalizaci n de procesos. El Control de Procesos no debería estar activado para un servidor de entorno web, ya que podrían ocurrir resultados inesperados utilizando las funciones de Control de Procesos.

Esta documentaci n explica en modo general como se utilizan las funciones de Control de Procesos. Para una informaci n más detallada sobre controles de procesos en Unix deberías acudir a la documentaci n de tu sistema sobre fork(2), waitpid(2), signal(2) o al manual de referecia de programaci n avanzada bajo entornos Unix (Advanced Programming in the UNIX Environment) de Richard Stevens, Addison-Wesley.

PCNTL ahora utiliza señales para manejar el mecanismo de llamadas de retorno, que es mucho más rápido que el anterior mecanismo. Este cambio sigue la misma semántica que utilizar "señales del usuario". Debes utilizar declare() para definir que lugares en tus programas se permiten las llamadas de retorno. De esta manera se minimiza la carga de eventos asíncronos. Anteriormente, al compilar PHP con la extensi n pcntl siempre estaban activadas las llamadas de retorno, produciendo así una carga innecesaria para las aplicaciones que no utilizaban pcntl.

Para scripts pcntl anteriores al PHP 4.3.0 hay que realizar los ajustes para definir con el declare() en que secciones de la aplicaci n se permiten las llamadas de retorno o simplemente permitirlo en toda la aplicaci n mediante la sintaxis global de declare().

Note: Esta extensión no está disponible en plataformas Windows

Requisitos

No se necesitan bibliotecas externas para construir esta extensión

Instalación

El soporte de Control de Procesos en PHP no está activado por defecto. Para activarlo, tienes que compilar la versión CGI o CLI de PHP con la opción --enable-pcntl en la configuración.

Note: Actualmente este modulo no funciona en plataformas diferentes a Unix (Windows).

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini.

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Constantes predefinidas

Las siguiente lista de señales están soportadas por las funciones de Control de Procesos. Comprueba el manual de señales de tu sistema para más detalles sobre el comportamiento por defecto de las mismas.

WNOHANG (integer)
WUNTRACED (integer)
SIG_IGN (integer)
SIG_DFL (integer)
SIG_ERR (integer)
SIGHUP (integer)
SIGINT (integer)
SIGQUIT (integer)
SIGILL (integer)
SIGTRAP (integer)
SIGABRT (integer)
SIGIOT (integer)
SIGBUS (integer)
SIGFPE (integer)
SIGKILL (integer)
SIGUSR1 (integer)
SIGSEGV (integer)
SIGUSR2 (integer)
SIGPIPE (integer)
SIGALRM (integer)
SIGTERM (integer)
SIGSTKFLT (integer)
SIGCLD (integer)
SIGCHLD (integer)
SIGCONT (integer)
SIGSTOP (integer)
SIGTSTP (integer)
SIGTTIN (integer)
SIGTTOU (integer)
SIGURG (integer)
SIGXCPU (integer)
SIGXFSZ (integer)
SIGVTALRM (integer)
SIGPROF (integer)
SIGWINCH (integer)
SIGPOLL (integer)
SIGIO (integer)
SIGPWR (integer)
SIGSYS (integer)
SIGBABY (integer)

Ejemplos

Este ejemplo realiza un fork (bifurcaci n) de un proceso daemon (demonio) con administraci n de señales.

Example#1 Ejemplo de Control de Procesos

<?php
declare(ticks=1);

$pid pcntl_fork();
if (
$pid == -1) {
     die(
"no se puede hacer fork"); 
} else if (
$pid) {
     exit(); 
// somos el proceso padre
} else {
     
// somos el proceso hijo
}

// detatch desde la terminal
if (!posix_setsid()) {
    die(
"no se puede hacer un detach desde la terminal");
}

// bucle infinito realizando tareas
while (1) {

    
// hacer algo interesante aquí .. 

}

function 
sig_handler($signo
{

     switch (
$signo) {
         case 
SIGTERM:
             
// tareas de finalización
             
exit;
             break;
         case 
SIGHUP:
             
// tareas de reinicio
             
break;
         default:
             
// tareas para las demás señales
     
}

}

// congiguración de las señales
pcntl_signal(SIGTERM"sig_handler");
pcntl_signal(SIGHUP"sig_handler");

?>

Ver también

Te puede ser útil echar un vistazo a POSIX functions

Table of Contents