Värdar med processbegränsningar
Delad hosting, härdade containrar och vissa PaaS-plattformar inaktiverar processfunktioner via disable_functions. Grephs sök-, omskrivnings- och indexeringsåtgärder körs inuti processen PHP (parallella genomsökningar förgrenar arbetskopior av den när det går), så de fortsätter att fungera där.
Vad startar processer
| Kod | Funktion | Används för |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Hitta de externa binärfilerna grep, rg, sg (eller npm) och gh på PATH |
Greph\Support\CommandRunner |
proc_open() |
Köra dessa binärfiler och de körbara filerna Greph som underprocesser |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Parallella arbetare för -j N / jobs: N |
ToolResolver och CommandRunner används bara av jämförelseverktygen: matrisgeneratorn för funktioner, benchmark-harnessen och oracle-testharnessen. Greph::search*(), Greph::rewriteAst(), indexbyggarna och de fyra körbara filerna anropar dem aldrig.
Arbetarpoolen kontrollerar function_exists('pcntl_fork') innan den förgrenar en process. En funktion som listas i disable_functions finns inte ur PHPs perspektiv, så på en sådan värd körs varje del i processen, med samma resultat som -j 1. Se Parallella arbetare.
När proc_open, shell_exec, exec, system, passthru, popen och pcntl_fork alla är inaktiverade fungerar textsökning med jobs: 4, AST-omskrivning, greph-index build, greph-index ast-cache build och search samt omslagen rg och sg som vanligt.
Hjälpfunktioner utan processer
När du bäddar in jämförelsehjälpfunktionerna i en sådan värd skapar du dem med en uttrycklig policy för inaktiverade processer:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Dessa instanser misslyckas säkert: varje uppslagning eller kommando kastar ett RuntimeException i stället för att försöka starta en process.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Skicka dem dit ett ToolResolver eller CommandRunner godtas, till exempel som argumenten toolResolver: och commandRunner: i Greph\FeatureMatrix\FeatureMatrixGenerator. Generatorn kör då klart utan att starta en process, men den kan inte skapa någon användbar rapport: sonder mot uppströmsverktygen rapporteras som Unavailable och sonder som kör Grephs egna körbara filer som Fail, eftersom varje sond är ett kommando. Skapa funktionsmatrisen på en maskin som tillåter processer.