Hosts com processos restritos
Hospedagem compartilhada, contêineres reforçados e algumas plataformas PaaS desativam funções de processo por meio de disable_functions. As operações de pesquisa, reescrita e indexação de Greph são executadas dentro do processo PHP (quando possível, as varreduras paralelas criam cópias de trabalho desse processo), então continuam funcionando nesses ambientes.
O que inicia processos
| Código | Função | Uso |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
Localizar os binários externos grep, rg, sg (ou npm) e gh no PATH |
Greph\Support\CommandRunner |
proc_open() |
Executar esses binários e os executáveis Greph como subprocessos |
Greph\Parallel\WorkerPool |
pcntl_fork() |
Trabalhadores paralelos para -j N / jobs: N |
ToolResolver e CommandRunner são usados apenas pelas ferramentas de comparação: o gerador da matriz de recursos, o conjunto de testes de benchmark e o conjunto de testes do oráculo. Greph::search*(), Greph::rewriteAst(), os construtores de índice e os quatro executáveis nunca os chamam.
O pool de trabalhadores verifica function_exists('pcntl_fork') antes de criar processos. Uma função listada em disable_functions não existe para PHP; portanto, em um host assim, cada bloco é executado no próprio processo, com o mesmo resultado de -j 1. Consulte Trabalhadores paralelos.
Com proc_open, shell_exec, exec, system, passthru, popen e pcntl_fork todos desativados, a pesquisa de texto com jobs: 4, a reescrita de AST, greph-index build, greph-index ast-cache build e search, além dos wrappers rg e sg, continuam funcionando normalmente.
Auxiliares sem processos
Ao incorporar os auxiliares de comparação em um host desse tipo, configure-os com uma política explícita de processos desativados:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Essas instâncias falham de forma segura: cada consulta ou comando lança um RuntimeException em vez de tentar iniciar um processo.
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
Passe-as onde quer que ToolResolver ou CommandRunner sejam aceitos, por exemplo, nos argumentos toolResolver: e commandRunner: de Greph\FeatureMatrix\FeatureMatrixGenerator. O gerador é concluído sem iniciar um processo, mas não consegue produzir um relatório útil: as sondagens das ferramentas upstream são indicadas como Unavailable, e as que executam os próprios executáveis de Greph como Fail, pois cada sondagem é um comando. Gere a matriz de recursos em uma máquina que permita processos.