Хостове с ограничения за процесите
Споделеният хостинг, защитените контейнери и някои 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 работят нормално.
Помощни инструменти без процеси
Когато вграждате помощните инструменти за сравнение в такъв хост, създавайте ги с изрична политика за забранени процеси:
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
Тези екземпляри отказват при грешка: всяко търсене или команда хвърля RuntimeException, вместо да се опитва да стартира процес.
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, защото всяка проверка е команда. Генерирайте матрицата с функции на машина, която позволява процеси.