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); }
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); }
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!