Ugrás a tartalomhoz

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:

PHP
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.

Text
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.