Перейти до вмісту

Хости з обмеженнями на процеси

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

Допоміжні засоби без процесів

Вбудовуючи допоміжні засоби порівняння в такий хост, створюйте їх із явною політикою вимкнення процесів:

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