Хосты с ограничением процессов
На виртуальном хостинге, в защищенных контейнерах и на некоторых платформах 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 используются только средствами сравнения: генератором матрицы функций, набором бенчмарков и тестовым стендом oracle. 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, поскольку каждая проверка представляет собой команду. Создавайте матрицу функций на машине, где разрешены процессы.