Saltar al contenido

Alojamientos con restricciones de procesos

El alojamiento compartido, los contenedores reforzados y algunas plataformas PaaS desactivan las funciones de procesos mediante disable_functions. Las operaciones de búsqueda, reescritura e indexación de Greph se ejecutan dentro del proceso de PHP (cuando es posible, los análisis paralelos bifurcan copias de trabajo), así que siguen funcionando en esos entornos.

Qué inicia procesos

Código Función Uso
Greph\Support\ToolResolver shell_exec() Localizar los binarios externos grep, rg, sg (o npm) y gh en PATH
Greph\Support\CommandRunner proc_open() Ejecutar esos binarios y los ejecutables de Greph como subprocesos
Greph\Parallel\WorkerPool pcntl_fork() Trabajadores paralelos para -j N / jobs: N

ToolResolver y CommandRunner solo se usan en las herramientas de comparación: el generador de la matriz de funciones, el arnés de pruebas de rendimiento y el arnés de pruebas del oráculo. Greph::search*(), Greph::rewriteAst(), los generadores del índice y los cuatro ejecutables nunca los llaman.

El grupo de trabajadores comprueba function_exists('pcntl_fork') antes de bifurcar. Una función incluida en disable_functions no existe para PHP, así que en un host de ese tipo cada fragmento se ejecuta en el mismo proceso y produce el mismo resultado que -j 1. Consulta Trabajadores paralelos.

Con proc_open, shell_exec, exec, system, passthru, popen y pcntl_fork desactivados, la búsqueda de texto con jobs: 4, la reescritura de AST, greph-index build, greph-index ast-cache build y search, y los envoltorios rg y sg funcionan con normalidad.

Ayudantes sin procesos

Al integrar los ayudantes de comparación en un host de ese tipo, créelos con una política explícita que desactive los procesos:

PHP
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();

Estas instancias fallan de forma segura: cada consulta o comando lanza un RuntimeException en vez de intentar iniciar un proceso.

Text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version

Páselos donde se acepte un ToolResolver o CommandRunner, por ejemplo, en los argumentos toolResolver: y commandRunner: de Greph\FeatureMatrix\FeatureMatrixGenerator. El generador termina sin iniciar un proceso, pero no puede producir un informe útil: las comprobaciones de las herramientas originales se indican como Unavailable y las que ejecutan los propios ejecutables de Greph, como Fail, porque todas las comprobaciones son comandos. Genere la matriz de funciones en una máquina que permita ejecutar procesos.