Vai al contenuto

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:

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

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