Installe un gestionnaire de signaux

# pcntl_signal

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

pcntl_signal — Installe un gestionnaire de signaux

### Description

pcntl_signal ( int `$signo` , callable|int `$handler` [, bool `$restart_syscalls` = `TRUE` ] ) : bool

pcntl_signal() installe un nouveau gestionnaire de signaux ou remplace le gestionnaire de signaux courant pour le signal indiqué par le paramètre `signo`.

### Liste de paramètres

`signo`

  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 :

  handler ( int `$signo` , mixed `$signinfo` ) : void
  `signo`
    Le signal à gérer.
  `siginfo`
    Si le système d'exploitation supporte les sturctures siginfo_t, ceci sera un tableau d'information du signal qui dépendent du signal.

  > 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.

### Valeurs de retour

Cette fonction retourne `TRUE` en cas de succès ou `FALSE` si une erreur survient.

### Historique

Version | Description
--- | ---
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).
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 signingo de ce signal spécifique. Ces données sont seulement fournies si le système d'exploitation a la structure signinfo_t. Si le système d'exploitation n'implémente pas siginfo_t NULL est fournit.

### Exemples

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 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";
?>`

### Notes

La fonction pcntl_signal() ne place pas dans une pile les gestionnaires de signaux, mais les remplace.

### Voir aussi

- pcntl_fork() - Duplique le process courant
- pcntl_waitpid() - Attend la fin de l'exécution d'un processus fils