Hosts met procesbeperkingen
Gedeelde hosting, geharde containers en sommige PaaS-platforms schakelen procesfuncties uit via disable_functions. De zoek-, herschrijf- en indexbewerkingen van Greph draaien binnen het PHP-proces (parallelle scans forken waar mogelijk werkkopieën daarvan), zodat ze daar blijven werken.
Processen starten
| Code | Functie | Gebruikt voor |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
De externe grep, rg, sg (of npm) en gh-binaire bestanden zoeken op de PATH |
Greph\Support\CommandRunner |
proc_open() |
Die binaire bestanden en de Greph-uitvoerbare bestanden uitvoeren als subprocessen |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Parallelle workers voor -j N / jobs: N |
ToolResolver en CommandRunner worden alleen gebruikt door de vergelijkingstools: de generator van de functiematrix, de benchmarkharnas en het orakeltestharnas. Greph::search*(), Greph::rewriteAst(), de indexbouwers en de vier uitvoerbare bestanden roepen ze nooit aan.
De workerpool controleert function_exists('pcntl_fork') voordat deze forkt. Een functie die in disable_functions staat vermeld, bestaat niet vanuit het oogpunt van PHP. Op zo'n host wordt elk deel daarom binnen hetzelfde proces uitgevoerd, met hetzelfde resultaat als -j 1. Zie Parallel Workers.
Zelfs als proc_open, shell_exec, exec, system, passthru, popen en pcntl_fork allemaal zijn uitgeschakeld, blijven tekstzoeken met jobs: 4, AST-herschrijven, greph-index build, greph-index ast-cache build en search, plus de wrappers rg en sg normaal werken.
Helpers voor uitgeschakelde processen
Wanneer u de vergelijkingshelpers in zo'n host insluit, maakt u ze aan met een expliciet beleid voor uitgeschakelde processen:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Deze instanties weigeren standaard: elke zoekopdracht of opdracht veroorzaakt een RuntimeException in plaats van te proberen een proces te starten.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Geef ze door waar een ToolResolver of CommandRunner wordt geaccepteerd, bijvoorbeeld als de argumenten toolResolver: en commandRunner: van Greph\FeatureMatrix\FeatureMatrixGenerator. De generator wordt dan uitgevoerd zonder een proces te starten, maar kan geen bruikbaar rapport produceren: probes voor de upstream-tools worden gerapporteerd als Unavailable en probes die de eigen uitvoerbare bestanden van Greph uitvoeren als Fail, omdat elke probe een opdracht is. Genereer de functiematrix op een machine waarop processen zijn toegestaan.