Host con processi limitati
L’hosting condiviso, i container con protezioni rafforzate e alcune piattaforme PaaS disabilitano le funzioni di processo tramite disable_functions. Le operazioni di ricerca, riscrittura e indicizzazione di Greph vengono eseguite all’interno del processo PHP (le scansioni parallele ne creano copie per i worker, quando possibile), quindi continuano a funzionare anche in questi ambienti.
Avvio dei processi
| Codice | Funzione | Utilizzo |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Individuazione dei binari esterni grep, rg, sg (o npm) e gh in PATH |
Greph\Support\CommandRunner |
proc_open() |
Esecuzione di questi binari e degli eseguibili Greph come sottoprocessi |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Worker paralleli per -j N / jobs: N |
ToolResolver e CommandRunner servono solo agli strumenti di confronto: il generatore della matrice delle funzionalità, il sistema di benchmark e l’harness di test dell’oracolo. Greph::search*(), Greph::rewriteAst(), i generatori di indici e i quattro eseguibili non li chiamano mai.
Il pool di worker verifica function_exists('pcntl_fork') prima di creare i processi. Una funzione elencata in disable_functions per PHP non esiste; quindi, su un host di questo tipo, ogni blocco viene elaborato nel processo corrente, con lo stesso risultato di -j 1. Consultate Worker paralleli.
Con proc_open, shell_exec, exec, system, passthru, popen e pcntl_fork tutti disabilitati, la ricerca testuale con jobs: 4, la riscrittura AST, greph-index build, greph-index ast-cache build e search, oltre ai wrapper rg e sg, funzionano normalmente.
Helper senza processi
Quando integrate gli helper di confronto in un host di questo tipo, createli specificando una policy che disabiliti i processi:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Queste istanze adottano un comportamento fail closed: ogni ricerca o comando genera un RuntimeException invece di tentare di avviare un processo.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Passatele ovunque sia accettato un ToolResolver o un CommandRunner, ad esempio negli argomenti toolResolver: e commandRunner: di Greph\FeatureMatrix\FeatureMatrixGenerator. Il generatore termina senza avviare processi, ma non può produrre un report utile: i controlli sugli strumenti a monte vengono indicati come Unavailable e quelli che eseguono gli eseguibili di Greph come Fail, perché ogni controllo è un comando. Generate la matrice delle funzionalità su una macchina che consente l’esecuzione di processi.