(PHP 4 >= 4.1.0, PHP 5)
pcntl_signal — Installe un gestionnaire de signaux
pcntl_signal() installe un nouveau gestionnaire
de signaux pour le signal indiqué par le paramètre
signo
.
signo
Le numéro du signal.
handler
Le gestionnaire de signaux est affecté
à handler
qui peut être le nom d'une fonction
utilisateur, ou bien l'une des deux constantes globales
SIG_IGN
et SIG_DFL
.
Note:
Notez que lorsque vous configurez le gestionnaire avec une méthode d'objet, le compteur de référence de l'objet est incrémenté, ce qui le rend persistant jusqu'à ce que vous changiez le gestionnaire de signaux pour un autre, ou que le script se termine.
restart_syscalls
Le paramètre optionnel restart_syscalls
spécifie si l'appel système de redémarrage (restarting) doit être utilisé
lorsque ce signal arrive.
Cette fonction retourne TRUE
en cas de
succès ou FALSE
si une erreur survient.
Version | Description |
---|---|
4.3.0 |
Le paramètre restart_syscalls a été ajouté.
|
4.3.0 | Utiliser une méthode d'un objet en tant que fonction de rappel est devenu possible. |
4.3.0 | Depuis PHP 4.3.0, PCNTL utilise les ticks comme mécanisme de signaux de traitement des rappels qui est plus rapide que l'ancien mécanisme. Ce changement suit les mêmes règles que l'utilisation des "user ticks". Vous devriez utiliser la requête declare() pour spécifier l'endroit dans votre programme où les rappels sont autorisés à être utilisés pour le traitement du signal de la fonction proprement dite (comme utilisé dans l'exemple suivant). |
Exemple #1 Exemple avec pcntl_signal()
<?php
// l'usage des ticks est nécessaire depuis PHP 4.3.0
declare(ticks = 1);
// gestionnaire de signaux système
function sig_handler($signo)
{
switch ($signo) {
case SIGTERM:
// gestion de l'extinction
exit;
break;
case SIGHUP:
// gestion du redémarrage
break;
case SIGUSR1:
echo "Reçu le signe SIGUSR1...\n";
break;
default:
// gestion des autres signaux
}
}
echo "Installation du gestionnaire de signaux...\n";
// Installation des gestionnaires de signaux
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
pcntl_signal(SIGUSR1, "sig_handler");
// ou bien utilisez un objet (disponible depuis PHP 4.3.0)
// pcntl_signal(SIGUSR1, array($obj, "faire_quelque_chose");
echo"Génération d'un signal SIGTERM à moi-même...\n";
// envoi de SIGUSR1 à l'identifiant de processus courant
posix_kill(posix_getpid(), SIGUSR1);
echo "Fait\n";
?>