PHP apprend le fonctionnement du mécanisme de traitement du signal

little bottle
Libérer: 2023-04-06 06:02:01
avant
2272 Les gens l'ont consulté

Cet article décrit principalement des exemples de mécanismes de traitement du signal écrits en langage PHP. Il a une certaine valeur de référence. Les amis intéressés peuvent l'apprendre.

function sig_handler($sig)
{
    print("handled sig: $sig\n");
}



pcntl_signal(SIGIO,   "sig_handler");
posix_kill(posix_getpid(),SIGIO);

while(true)
{
    posix_kill(posix_getpid(),SIGIO);

    pcntl_signal_dispatch();

    sleep(1);
}
Copier après la connexion

Il est préférable de parcourir manuellement la file d'attente des signaux au lieu d'utiliser le mécanisme de traitement du signal de declare(ticks=1) et tick_handler() fourni par PHP en raison des problèmes de performances du Mécanisme tick. , chaque fois qu'une instruction est exécutée, tick_handler est rappelé pour voir s'il y a un signal, mais la plupart du temps, il n'y a pas de signal.

posix_signal définit le traitement de rappel du signal.

posix_kill met uniquement le signal dans la file d'attente de signal en attente du processus. Il ne déclenche pas le rappel du signal. traité par pcntl_signal_dispatch.

posix_getpwnam("nginx") : Obtenez l'uid, le gid et d'autres informations du nom d'utilisateur

pcntl_signal(SIGPIPE, SIG_IGN, false) : Ignorez le SIGPIPE signal envoyé par le noyau, lorsque la connexion a été fermée, le processus continue d'envoyer des données au socket invalide, le système recevra un paquet TCP contenant le bit de contrôle RST et le système enverra un signal SIGPIPE au processus, indiquant au processus indiquant que la connexion a été déconnectée et qu’aucune écriture supplémentaire n’est requise. La gestion par défaut de ce signal consiste à terminer le processus, mais le processus peut l'attraper et ignorer le signal pour éviter de se terminer involontairement.

options de contexte de socket :

backlog : utilisé pour limiter le nombre de connexions en attente dans la file d'attente d'écoute du flux

so_reuseport : port de réutilisation (connecté par la planification du noyau ) Il y a plusieurs processus d'écoute sur le même port. Étant donné que le processus correspondant est marqué par hachage, le nombre de processus d'écoute ne peut pas être modifié.)

Traitement du signal de minuterie

pcntl_signal(SIGALRM,"sig_handler");
pcntl_alarm(2);
function sig_handler($sig)
{
    echo "one second after";
}
while (1)
{
    pcntl_signal_dispatch();
    sleep(1);
}
Copier après la connexion

Tutoriels associés : Programmation PHP du débutant au compétent

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal