


Comment PHP gère les signaux de processus (avec exemples)
Remarque : L'extension pcntl n'est disponible qu'en mode cli/cgi. Non disponible dans mod_php et php-fpm. N'utilisez pas cet ensemble de fonctions dans un environnement de serveur Web, car cela entraînerait des résultats imprévisibles. De plus, Windows, en tant que système non similaire à Unix, ne dispose pas de ces fonctions.
PCNTL utilise les ticks comme mécanisme de rappel de gestion du signal, ce qui peut minimiser la charge lors du traitement des événements asynchrones. Que sont les tiques ? Tick est un événement qui se produit chaque fois que l'interpréteur exécute N instructions de bas niveau dans un segment de code. Ce segment de code doit être spécifié via declare.
Ce qui suit est un exemple d'envoi d'un signal SIGALRM toutes les 5 secondes, de l'obtenir par la fonction signal_handler, puis d'imprimer un "Caught SIGALRM" :
<?php declare(ticks = 1); function signal_handler($signal) { print "Caught SIGALRM/n"; pcntl_alarm(5); } pcntl_signal(SIGALRM, "signal_handler", true); pcntl_alarm(5); while(true){ } ?>
En fait, les performances du signal pcntl_signal officiel est extrêmement médiocre.La raison principale est que les fonctions PHP ne peuvent pas être directement enregistrées dans les paramètres du signal du système d'exploitation, le signal pcntl doit donc s'appuyer sur le mécanisme de tick. Le principe d'implémentation de pcntl_signal est d'ajouter le signal à une file d'attente après avoir déclenché le signal. Vérifiez ensuite en permanence s'il y a un signal dans la fonction de rappel des ticks de PHP. S'il y a un signal, exécutez la fonction de rappel spécifiée dans PHP. Sinon, quittez la fonction. ticks=1 signifie que cette fonction sera rappelée à chaque fois qu'une ligne de code PHP est exécutée. En fait, aucun signal n'est généré la plupart du temps, mais la fonction ticks est toujours exécutée. Une meilleure approche consiste à supprimer les coches et à utiliser pcntl_signal_dispatch à la place pour gérer le signal vous-même dans la boucle de code.
Mise en place de pcntl_signal_dispatch
<?php // 定义一个处理器,接收到SIGINT信号后只输出一行信息 function signalHandler($signo) { switch ($signo) { case SIGUSR1: echo "SIGUSR1\n"; break; case SIGUSR2: echo "SIGUSR2\n"; break; default: echo "unknow"; break; } } //安装信号触发器器 pcntl_signal(SIGINT, 'signalHandler'); while (true) { sleep(1); posix_kill(posix_getpid(), SIGUSR1);///向当前进程发送SIGUSR1信号 pcntl_signal_dispatch(); //接收到信号时,调用注册的signalHandler() }
Fonctions PCNTL :
Traitement du signal
int pcntl_alarm ( int $seconds )
Définissez un compteur pour envoyer le signal SIGALRM après $secondes secondes
bool pcntl_signal(int $signo ,callback $handler [,bool $restart_syscalls=true])
Définissez une fonction de rappel pour $signo pour gérer le signal
Le premier Le paramètre est le numéro du signal et le deuxième paramètre est la fonction PHP qui est rappelée lorsque le signal se produit. Le troisième paramètre est de savoir s'il faut redémarrer et s'il faut réenregistrer ce signal. Si ce paramètre est faux, alors ce signal n'est enregistré et traité qu'une seule fois.
Remarque : Chaque appel à pcntl_alarm() annulera le signal d'alarme et la fonction sleep() précédemment définis.
Ce qui suit est un exemple d'envoi d'un signal SIGALRM toutes les 5 secondes, de l'obtenir par la fonction signal_handler, puis d'imprimer un "Caught SIGALRM" :
<?php declare(ticks = 1); function signal_handler($signal) { print "Caught SIGALRM/n"; pcntl_alarm(5); } pcntl_signal(SIGALRM, "signal_handler", true); pcntl_alarm(5); for(;;) { } ?>
Exécuter le program
void pcntl_exec ( string $path [, array $args [, array $envs ]] )
Exécuter le programme spécifié dans l'espace de processus actuel, similaire à la fonction de la famille exec dans c. L'espace dit actuel est l'espace où le code du programme spécifié est chargé et écrase le processus en cours. Le processus se termine après l'exécution du programme.
<?php $dir = '/home/test/'; $cmd = 'ls'; $option = '-l'; $pathtobin = '/bin/ls'; $arg = array($cmd, $option, $dir); pcntl_exec($pathtobin, $arg); echo '123'; //不会执行到该行 ?>
Créer un processus
int pcntl_fork ( void ) 为当前进程创建一个子进程 int pcntl_wait ( int &$status [, int $options ] ) 阻塞当前进程,只到当前进程的一个子进程退出或者收到一个结束当前进程的信号。 int pcntl_waitpid ( int $pid , int &$status [, int $options ] ) 功能同pcntl_wait,区别为waitpid为等待指定pid的子进程。当pid为-1时pcntl_waitpid与pcntl_wait一样。
Les informations d'état du processus enfant sont stockées dans $status dans les fonctions pcntl_wait et pcntl_waitpid. Ce paramètre peut être. utilisé pour les fonctions telles que pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig et pcntl_waitpid.
Par exemple
<?php $pid = pcntl_fork(); if($pid) { pcntl_wait($status); $id = getmypid(); echo "parent process,pid {$id}, child pid {$pid}/n"; } else { $id = getmypid(); echo "child process,pid {$id}/n"; sleep(2); } ?>
Le processus enfant dort pendant 2 secondes avant de se terminer après avoir généré des mots tels que processus enfant, tandis que le processus parent se bloque jusqu'à ce que le processus enfant se termine avant de continuer à s'exécuter.
Priorité du processus
int pcntl_getpriority ([ int $pid [, int $process_identifier ]] ) 取得进程的优先级,即nice值,默认为0。不同的系统类型以及内核版本下 优先级可能不同(手册中为-20到20) bool pcntl_setpriority ( int $priority [, int $pid [, int $process_identifier ]] ) 设置进程的优先级
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
