Lors de l'écriture de scripts de ligne de commande dans PHP, nous voulons parfois définir ou obtenir des titres de processus via CLI_SET_PROCESS_TITLE et CLI_GET_PROCESS_TITLE pour identifier plus clairement l'état actuel du script en cours d'exécution, en particulier lorsque vous utilisez PS , les outils supérieurs et autres pour la surveillance de processus. Ceci est très pratique dans la rédaction d'applications CLI telles que les démons et les consommateurs de file d'attente de tâches.
Cependant, de nombreux développeurs rencontreront le problème du renvoi d'une chaîne vide ou de faux lors de l'appel CLI_GET_PROCESS_TITLE () . Il est évident que CLI_SET_PROCESS_TITLE () a été appelé avant et a réussi à définir le titre, pourquoi ne parvient-il pas à le récupérer? Le problème peut ne pas résider dans votre code, mais dans la façon dont PHP est construit.
Les fonctions CLI_SET_PROCESS_TITLE de PHP et CLI_GET_PROCESS_TITLE proviennent de ProCtitle Support, qui est une caractéristique facultative que PHP peut compiler au moment de la compilation. Si votre PHP n'activait pas - Eenable-CLI et --Enable-ProTitle n'est pas activé pendant le processus de construction, ces fonctions sont inutiles.
Vous pouvez vérifier avec la commande suivante:
php -i | grep "Process title"
S'il n'y a pas de sortie pertinente, ou si vous trouvez la ligne suivante manquante:
Process title support => enabled
Cela signifie que cette fonctionnalité n'est pas activée dans votre environnement PHP.
Voici un exemple de configuration et d'essayer d'obtenir le titre du processus:
<?php
cli_set_process_title("my_worker_task");
$title = cli_get_process_title();
if ($title === false || $title === "") {
echo "Impossible d'obtenir le titre du processus,Vérifiez, s'il vous plaît PHP S'il est activé proctitle soutien。\n";
} else {
echo "Le titre de processus actuel est: " . $title . "\n";
}
Si votre PHP ne permet pas le support pertinent, vous ne pouvez voir que des avertissements ou une sortie vide après exécution.
Vous devez ajouter des options - enracinement-CLI (généralement activées par défaut). Par exemple:
./configure --enable-cli --enable-proctitle
make && make install
Cela permet la prise en charge du titre de processus, et après cela, vous pouvez utiliser ces deux fonctions normalement.
Si vous ne pouvez pas recompiler PHP, vous pouvez envisager de définir manuellement le titre de processus via des commandes Système ou d'appel, par exemple: par exemple:
<?php
$title = "my_custom_task";
exec("exec -a $title php your_script.php");
Cependant, il convient de noter que cette méthode n'est pas suffisamment élégante et peut également être peu fiable car exec () est désactivée ou que différents systèmes se comportent différemment.
cli_get_process_title () ne peut pas obtenir le titre de processus, ce qui n'est probablement pas un problème avec le code, mais PHP n'activait pas les fonctions pertinentes. Lorsque les développeurs rencontrent de tels problèmes, ils devraient vérifier les paramètres de construction de l'environnement PHP actuel dès que possible. Surtout lorsque vous utilisez Docker ou certains systèmes d'exploitation avec des versions PHP, vous devez faire attention à ce détail.