Pular para o conteúdo

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:

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

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