Contrôle des processus
Introduction
Le système de contrôle des processus de PHP implémente un système de création, gestion et terminaison des processus comme sous Unix. Cette extension ne doit pas être activée pour une utilisation en serveur web, car les résultats pourraient être inattendus.
Cette documentation explique l'utilisation générale des fonctions du gestionaire de processus. Pour des informations plus détaillées sur le contrôle des processus Unix, nous vous encourageons à consulter votre documentation système, incluant notamment fork(2), waitpid(2) et signal(2), ou bien à compulser un ouvrage de référence comme "Advanced Programming in the UNIX Environment" par W. Richard Stevens (Addison-Wesley).
PCNTL utilise maintenant les ticks comme mécanisme de callback du gestionnaire de signaux, ce qui est beaucoup plus rapide que la version précédente. Ce changement suit la même sémantique que l'utilisation de "ticks utilisateurs". Vous utilisez declare() pour spécifier les endroits de votre programme où les callbacks peuvent être appelés. Cela vous permet de minimaliser la consommation dûe à la gestion d'événements asynchrones. Par le passé, compiler PHP avec pcntl revenait toujours à souffrir cette consommation, même si votre script n'utilisait pas pcntl.
Il y'a un ajustement à faire pour tous les scripts pcntl basés sur une version antérieure à PHP 4.3.0 afin qu'ils puissent fonctionner : il faut soit utiliser declare() dans la section où vous voulez avoir le callback, soit l'activer pour tout le script avec la nouvelle syntaxe globale de declare().
Note: Cette extension n'est pas disponible sur les plates-formes Windows.
Pré-requis
Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.
Installation
Le support du contrôle des processus n'est pas activé par défaut en PHP. Vous devez compiler la version CLI ou CGI de PHP avec l'option de configuration --enable-pcntl pour activer le support de cette extension.
Note: Actuellement, ce module ne fonctionne pas sur les environnements non Unix comme Windows.
Configuration à l'exécution
Cette extension ne définit aucune directive de configuration.
Types de ressources
Cette extension ne définit aucune ressource.
Constantes pré-définies
La liste suivante représente les signaux supportés par les fonctions de gestion des processus. Reportez-vous au manuel de votre système (signal(7)) pour plus de détails sur ces signaux.
- WNOHANG (entier)
- WUNTRACED (entier)
- SIG_IGN (entier)
- SIG_DFL (entier)
- SIG_ERR (entier)
- SIGHUP (entier)
- SIGINT (entier)
- SIGQUIT (entier)
- SIGILL (entier)
- SIGTRAP (entier)
- SIGABRT (entier)
- SIGIOT (entier)
- SIGBUS (entier)
- SIGFPE (entier)
- SIGKILL (entier)
- SIGUSR1 (entier)
- SIGSEGV (entier)
- SIGUSR2 (entier)
- SIGPIPE (entier)
- SIGALRM (entier)
- SIGTERM (entier)
- SIGSTKFLT (entier)
- SIGCLD (entier)
- SIGCHLD (entier)
- SIGCONT (entier)
- SIGSTOP (entier)
- SIGTSTP (entier)
- SIGTTIN (entier)
- SIGTTOU (entier)
- SIGURG (entier)
- SIGXCPU (entier)
- SIGXFSZ (entier)
- SIGVTALRM (entier)
- SIGPROF (entier)
- SIGWINCH (entier)
- SIGPOLL (entier)
- SIGIO (entier)
- SIGPWR (entier)
- SIGSYS (entier)
- SIGBABY (entier)
Exemples
Cet exemple forke un processus démon, avec un gestionnaire de signaux.
Example#1 Exemple de contrôle de processus
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die("impossible de forker");
} elseif ($pid) {
exit(); // nous sommes le processus père
} else {
//nous sommes le processus fils
}
// détachons le processus du terminal
if (!posix_setsid()) {
die("impossible de se détacher du terminal");
}
// setup signal handlers
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
// boucle infinie
while(1) {
// exécution de quelque chose
}
function sig_handler($signo)
{
switch($signo) {
case SIGTERM:
// gestion des tâches de terminaison
exit;
break;
case SIGHUP:
// gestion des tâches de redémarrage
break;
default:
// gestion des autres tâches
}
}
?>
Voir aussi
Un tour par la section sur les fonctions POSIX peut être utile.
Table of Contents
- pcntl_alarm — Planifie une alarme pour délivrer un signal
- pcntl_exec — Exécute le programme indiqué dans l'espace courant de processus
- pcntl_fork — Duplique le process courant
- pcntl_getpriority — Retourne la priorité d'un processus
- pcntl_setpriority — Change la priorité d'un processus
- pcntl_signal — Installe un gestionnaire de signaux
- pcntl_wait — Attend ou retourne le statut d'un processus fils
- 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 — Vérifie si le code de retour représente une fin normale
- pcntl_wifsignaled — Retourne TRUE si le code statut représente une fin due à un signal
- pcntl_wifstopped — Retourne TRUE si le processus fils est stoppé
- pcntl_wstopsig — Retourne le signal qui a causé l'arrêt du processus fils
- pcntl_wtermsig — Retourne le signal qui a provoqué la fin du processus fils