LXXXI. 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_IGN | SIGFPE | SIGCONT |
SIG_DFL | SIGKILL | SIGSTOP |
SIG_ERR | 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 | | |
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