Manuel PHP
Précédent |  | Suivant

# pcntl_signal

(PHP 4 >= 4.1.0, PHP 5)

pcntl_signal -- Installe un gestionnaire de signaux

## Description

bool pcntl_signal ( int signo, callback handle [, bool restart_syscalls])

pcntl_signal() installe un nouveau gestionnaire de signaux pour le signal indiqué par le paramètre signo. 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`. Le paramètre optionnel restart_syscalls spécifie si l'appel système de redémarrage (restarting) doit être utilisé lorsque ce signal arrive, et par défaut, ce paramètre vaut `TRUE`.

Cette fonction retourne `TRUE` en cas de succès, `FALSE` en cas d'échec.

> Note : La paramètre optionnel restart_syscalls n'est disponible que depuis la version 4.3.0 de PHP.

> Note : La possibilité d'utiliser une méthode d'objet comme fonction de callback est disponible depuis PHP 4.3.0. 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 gestionaire de signeux pour un autre, ou que le script se termine.

Exemple 1. Exemple avec pcntl_signal()

`<?php
// l'usage des tick est nécessaire depuis PHP 4.3.0
declare (ticks = 1);
// gestionnaire de siganux 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_quelquechose");
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 "Done\n"
?>`

> Note : Depuis PHP 4.3.0, PCNTL utilise les ticks comme méchanisme de signals de traitement des rappels qui est plus rapide que l'ancien méchanisme. 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 dîte (comme utilisé dans l'exemple précédent).

Voir aussi pcntl_fork() et pcntl_waitpid().

Précédent | Sommaire | Suivant
pcntl_setpriority | Niveau supérieur | pcntl_wait