Hôtes à processus restreints
Les hébergements mutualisés, les conteneurs renforcés et certaines plateformes PaaS désactivent les fonctions de processus via disable_functions. Les opérations de recherche, de réécriture et d’indexation de Greph s’exécutent dans le processus PHP (les analyses parallèles créent des copies de travail lorsqu’elles le peuvent), elles continuent donc de fonctionner dans cet environnement.
Démarrage de processus
| Code | Fonction | Utilisation |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Localiser les binaires externes grep, rg, sg (ou npm) et gh sur le PATH |
Greph\Support\CommandRunner |
proc_open() |
Exécuter ces binaires et les exécutables Greph comme sous-processus |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Travailleurs parallèles pour -j N / jobs: N |
ToolResolver et CommandRunner servent uniquement aux outils de comparaison : au générateur de matrice de fonctionnalités, au banc d’essai de performance et au banc d’essai oracle. Greph::search*(), Greph::rewriteAst(), les générateurs d’index et les quatre exécutables ne les appellent jamais.
Le pool de travailleurs vérifie function_exists('pcntl_fork') avant de créer des processus enfants. Une fonction répertoriée dans disable_functions n’existe pas du point de vue de PHP ; sur un tel hôte, chaque lot s’exécute donc dans le processus courant, avec le même résultat que -j 1. Voir Travailleurs parallèles.
Même lorsque proc_open, shell_exec, exec, system, passthru, popen et pcntl_fork sont tous désactivés, la recherche textuelle avec jobs: 4, la réécriture AST, greph-index build, greph-index ast-cache build et search, ainsi que les wrappers rg et sg, fonctionnent normalement.
Assistants sans processus
Lorsque vous intégrez les assistants de comparaison à un tel hôte, créez-les avec une règle explicite désactivant les processus :
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Ces instances échouent de manière sécurisée : chaque recherche ou commande déclenche une RuntimeException au lieu de tenter de démarrer un processus.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Transmettez-les partout où un ToolResolver ou un CommandRunner est accepté, par exemple dans les arguments toolResolver: et commandRunner: de Greph\FeatureMatrix\FeatureMatrixGenerator. Le générateur s’exécute alors sans démarrer de processus, mais il ne peut pas produire de rapport utile : les sondes des outils en amont sont signalées comme Unavailable et celles qui exécutent les propres exécutables de Greph comme Fail, car chaque sonde est une commande. Générez la matrice de fonctionnalités sur une machine qui autorise les processus.