(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — Installe un gestionnaire de signaux
pcntl_signal() installe un nouveau gestionnaire
de signaux ou remplace le gestionnaire de signaux courant
pour le signal indiqué par le paramètre
signal
.
signal
Le numéro du signal.
handler
Le gestionnaire de signaux. Peut être un callable,
qui sera appelé pour gérer le signal, ou bien l'une des deux
constantes globales SIG_IGN
ou SIG_DFL
,
qui vont, respectivement, ignorer le signal ou restaurer le gestionnaire
de signaux par défaut.
Si un callable est fourni, il doit implémenter la signature suivante :
signal
siginfo
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 |
---|---|
7.1.0 | À partir de PHP 7.1.0 le gestionnaire de la fonction de rappel est doté d'un second argument qui contient le siginfo de ce signal spécifique. Ces données sont seulement fournies si le système d'exploitation a la structure siginfo_t. Si le système d'exploitation n'implémente pas siginfo_t NULL est fournit. |
Exemple #1 Exemple avec pcntl_signal()
<?php
// l'usage des ticks est nécessaire
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
// pcntl_signal(SIGUSR1, array($obj, "faire_quelque_chose"));
echo"Génération d'un signal SIGUSR1 à moi-même...\n";
// envoi de SIGUSR1 à l'identifiant de processus courant
// les fonctions posix_* nécéssite l'extension posix
posix_kill(posix_getpid(), SIGUSR1);
echo "Fait\n";
?>
La fonction pcntl_signal() ne place pas dans une pile les gestionnaires de signaux, mais les remplace.