Gazde cu procese restricționate
Găzduirea partajată, containerele securizate și unele platforme PaaS dezactivează funcțiile de proces prin disable_functions. Operațiile de căutare, rescriere și indexare ale Greph rulează în procesul PHP (scanările paralele creează copii worker ale acestuia când pot), așa că funcționează în continuare în aceste medii.
Ce pornește procese
| Cod | Funcție | Utilizare |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Localizarea binarelor externe grep, rg, sg (sau npm) și gh pe PATH |
Greph\Support\CommandRunner |
proc_open() |
Rularea acelor binare și a executabilelor Greph ca subprocese |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Workeri paraleli pentru -j N / jobs: N |
ToolResolver și CommandRunner sunt folosite doar de instrumentele de comparare: generatorul matricei de funcționalități, cadrul de benchmark și cadrul de testare oracle. Greph::search*(), Greph::rewriteAst(), constructorii de indexuri și cele patru executabile nu le apelează niciodată.
Pool-ul de workeri verifică function_exists('pcntl_fork') înainte de a crea procese. O funcție listată în disable_functions nu există din perspectiva PHP, așa că pe o astfel de gazdă fiecare fragment rulează în proces, cu același rezultat ca -j 1. Consultați Workeri paraleli.
Cu proc_open, shell_exec, exec, system, passthru, popen și pcntl_fork toate dezactivate, căutarea textului cu jobs: 4, rescrierea AST, greph-index build, greph-index ast-cache build și search, precum și wrapper-ele rg și sg funcționează normal.
Ajutoare pentru modul fără procese
Când încorporați ajutoarele de comparare într-o astfel de gazdă, construiți-le cu o politică explicită fără procese:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Aceste instanțe eșuează în siguranță: fiecare căutare sau comandă aruncă o RuntimeException în loc să încerce să pornească un proces.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Transmiteți-le oriunde este acceptat un ToolResolver sau CommandRunner, de exemplu ca argumente toolResolver: și commandRunner: ale Greph\FeatureMatrix\FeatureMatrixGenerator. Generatorul se încheie fără să pornească un proces, dar nu poate produce un raport util: verificările instrumentelor din amonte sunt raportate ca Unavailable, iar cele care rulează executabilele proprii ale Greph ca Fail, deoarece fiecare verificare este o comandă. Generați matricea de funcționalități pe o mașină care permite procesele.