Hoppa till innehåll

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:

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

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