Folyamatkorlátozott gazdagépek
A megosztott tárhelyek, a megerősített konténerek és egyes PaaS-platformok letiltják a folyamatkezelő függvényeket a disable_functions használatával. A Greph keresési, átírási és indexelési műveletei a PHP folyamaton belül futnak (a párhuzamos vizsgálatok, ha lehet, munkafolyamatokat indítanak belőle), ezért ezeken a környezeteken is működnek.
Mi indít folyamatokat
| Kód | Függvény | Felhasználás |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
A külső grep, rg, sg (vagy npm) és gh binárisok megkeresése a PATH helyen |
Greph\Support\CommandRunner |
proc_open() |
E binárisok és a Greph futtatható fájlok alfolyamatként való futtatása |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Párhuzamos munkafolyamatok a -j N / jobs: N számára |
A ToolResolver és a CommandRunner kizárólag az összehasonlító eszközöket szolgálja: a funkciómátrix-generátort, a benchmarkkeretrendszert és az oracle-tesztkeretrendszert. A Greph::search*(), a Greph::rewriteAst(), az indexépítők és a négy futtatható fájl soha nem hívja meg őket.
A munkafolyamat-készlet a fork előtt ellenőrzi a function_exists('pcntl_fork') értékét. A disable_functions listáján szereplő függvény a PHP szemszögéből nem létezik, ezért ilyen gazdagépen minden részfolyamat a folyamaton belül fut, ugyanazzal az eredménnyel, mint a -j 1 esetén. Lásd: Párhuzamos munkafolyamatok.
Ha a proc_open, a shell_exec, a exec, a system, a passthru, a popen és a pcntl_fork mind le van tiltva, a szöveges keresés a jobs: 4 használatával, az AST átírása, a greph-index build, a greph-index ast-cache build és a search, valamint a rg és a sg burkolója is rendesen működik.
Folyamatok nélkül működő segédeszközök
Ha ilyen gazdagépbe ágyazza be az összehasonlító segédeszközöket, kifejezetten folyamatok nélküli házirenddel hozza létre őket:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Ezek a példányok biztonságosan leállnak: minden keresés vagy parancs RuntimeException hibát dob, és nem próbál folyamatot indítani.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Adja át őket minden olyan helyen, ahol ToolResolver vagy CommandRunner használható, például a Greph\FeatureMatrix\FeatureMatrixGenerator toolResolver: és commandRunner: argumentumaként. A generátor így folyamat indítása nélkül lefut, de használható jelentést nem tud készíteni: a felfelé irányuló eszközökkel végzett próbák eredménye Unavailable, a Greph saját futtatható fájljait futtató próbáké pedig Fail lesz, mivel minden próba egy parancs. A funkciómátrix generálását olyan gépen végezze, amely engedélyezi a folyamatokat.