Към съдържанието

Хостове с ограничения за процесите

Споделеният хостинг, защитените контейнери и някои PaaS платформи деактивират функциите за процеси чрез disable_functions. Търсенето, пренаписването и индексирането на Greph се изпълняват в процеса PHP (при паралелни сканирания се създават работни копия, когато това е възможно), така че продължават да работят и там.

Какво стартира процеси

Код Функция Използва се за
Greph\Support\ToolResolver shell_exec() Откриване на външните двоични файлове grep, rg, sg (или npm) и gh в PATH
Greph\Support\CommandRunner proc_open() Стартиране на тези двоични файлове и изпълнимите файлове Greph като подпроцеси
Greph\Parallel\WorkerPool pcntl_fork() Паралелни работници за -j N / jobs: N

ToolResolver и CommandRunner обслужват само инструментите за сравнение: генератора на матрицата с функции, бенчмарк набора и тестовия набор с еталонни резултати. Greph::search*(), Greph::rewriteAst(), конструкторите на индекси и четирите изпълними файла никога не ги извикват.

Пулът от работници проверява function_exists('pcntl_fork'), преди да създаде нов процес. Функция, посочена в disable_functions, не съществува за PHP, така че при такъв хост всеки фрагмент се изпълнява в текущия процес със същия резултат като -j 1. Вижте Паралелни работници.

Когато proc_open, shell_exec, exec, system, passthru, popen и pcntl_fork са деактивирани, търсенето на текст с jobs: 4, пренаписването на AST, greph-index build, greph-index ast-cache build и search, както и обвивките rg и sg работят нормално.

Помощни инструменти без процеси

Когато вграждате помощните инструменти за сравнение в такъв хост, създавайте ги с изрична политика за забранени процеси:

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

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

Тези екземпляри отказват при грешка: всяко търсене или команда хвърля RuntimeException, вместо да се опитва да стартира процес.

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

Подайте ги навсякъде, където се приема ToolResolver или CommandRunner, например като аргументите toolResolver: и commandRunner: на Greph\FeatureMatrix\FeatureMatrixGenerator. Генераторът ще завърши, без да стартира процес, но няма да може да изготви полезен отчет: проверките спрямо инструментите нагоре по веригата ще бъдат отчетени като Unavailable, а проверките, които изпълняват собствените изпълними файлове на Greph — като Fail, защото всяка проверка е команда. Генерирайте матрицата с функции на машина, която позволява процеси.