CI. 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().

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

Requirimientos

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.

Nota: 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.

Ejemplo 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

Tabla de contenidos
pcntl_alarm --  Programa una alarma para hacer una llamada de una señal
pcntl_exec --  Ejecuta un programa específico en el espacio de proceso actual
pcntl_fork -- Forks the currently running process
pcntl_getpriority --  Get the priority of any process
pcntl_setpriority --  Change the priority of any process
pcntl_signal -- Installs a signal handler
pcntl_wait --  Waits on or returns the status of a forked child
pcntl_waitpid -- Waits on or returns the status of a forked child
pcntl_wexitstatus --  Returns the return code of a terminated child
pcntl_wifexited --  Returns TRUE if status code represents a successful exit
pcntl_wifsignaled --  Returns TRUE if status code represents a termination due to a signal
pcntl_wifstopped --  Returns TRUE if child process is currently stopped
pcntl_wstopsig --  Returns the signal which caused the child to stop
pcntl_wtermsig --  Returns the signal which caused the child to terminate

Hosting by: hurra.com
Generated: 2007-01-26 18:01:10