LXXXII. Contrôle des processus

Le gestionnaire de contrôle des processus n'est pas activé par défaut. Il faut utiliser l'option de configuration --enable-pcntl lors de la compilation de PHP pour l'activer.

La liste suivante rassemble tous les signaux qui sont actuellement supportés par les fonctions de gestion des processus de PHP. Reportez vous à votre manuel pour plus de détails sur les comportements de ces signaux.

Tableau 1. Signaux supportés

SIG_IGNSIGFPESIGCONT
SIG_DFLSIGKILLSIGSTOP
SIG_ERRSIGUSR1SIGTSTP
SIGHUPSIGUSR2SIGTTIN
SIGINTSIGSEGVSIGTTOU
SIGQUITSIGPIPESIGURG
SIGILLSIGALRMSIGXCPU
SIGTRAPSIGTERMSIGXFSZ
SIGABRTSIGSTKFLTSIGVTALRM
SIGIOTSIGCHLDSIGPROF
SIGBUSSIGCLDSIGWINCH
SIGPOLLSIGIOSIGPWR
SIGSYS

Exemple de contrôle de processus

Cet exemple effectue un fork du processus démon grâce à un gestionnaire de signaux.

Exemple 1. Process Control Example

<?php
  $pid = pcntl_fork();
  if ($pid == -1) {
     die("could not fork"); 
  } else if ($pid) {
     exit(); // we are the parent 
  } else {
     // we are the child
  }

// detatch from the controlling terminal
  if (!posix_setsid()) {
    die("could not detach from terminal");
  }

// setup signal handlers
  pcntl_signal(SIGTERM, "sig_handler");
  pcntl_signal(SIGHUP, "sig_handler");

// loop forever performing tasks
  while(1) {
    // do something interesting here
}

function sig_handler($signo) {
     switch($signo) {
         case SIGTERM:
             // handle shutdown tasks
             exit;
             break;
         case SIGHUP:
             // handle restart tasks
             break;
         default:
             // handle all other signals
     }
}
?<
Table des matières
pcntl_exec --  Executes specified program in current process space
pcntl_fork -- Forks the currently running process
pcntl_signal -- Installe un gestionnaire de signaux
pcntl_waitpid -- Attend la fin de l'exécution d'un processus fils
pcntl_wexitstatus --  Retourne le code d'un processus fils terminé
pcntl_wifexited --  Retourne TRUE si le code de retour représente une fin normale
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