Перейти к содержимому

Хосты с ограничением процессов

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

Вспомогательные средства без процессов

При встраивании вспомогательных средств сравнения в такой хост создавайте их с явно заданной политикой запрета процессов:

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