
# Хостове с ограничения за процесите

Споделеният хостинг, защитените контейнери и някои 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`. Вижте [Паралелни работници](https://greph.inline0.dev/bg/docs/advanced/parallel).

Когато `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`, защото всяка проверка е команда. Генерирайте [матрицата с функции](https://greph.inline0.dev/bg/docs/advanced/feature-matrix) на машина, която позволява процеси.
