Хости з обмеженнями на процеси
На віртуальному хостингу, у захищених контейнерах і на деяких платформах 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'). Для PHP функція зі списку disable_functions вважається неіснуючою, тому на такому хості кожен блок виконується в поточному процесі з тим самим результатом, що й у -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. Генератор завершить роботу без запуску процесу, але не зможе створити корисний звіт: проби для upstream-інструментів матимуть статус Unavailable, а для власних виконуваних файлів Greph — статус Fail, бо кожна проба запускає команду. Згенеруйте матрицю можливостей на комп'ютері, де дозволено запускати процеси.