
# Hostitelé s omezeným spouštěním procesů

Sdílený hosting, zabezpečené kontejnery a některé platformy PaaS zakazují procesní funkce prostřednictvím `disable_functions`. Vyhledávání, přepisování a indexační operace Greph probíhají uvnitř procesu PHP (paralelní skenování vytváří kopie pracovních procesů, kdykoli je to možné), takže na těchto platformách dál fungují.

## Co spouští procesy

| Kód | Funkce | Použití |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Vyhledání externích binárních souborů `grep`, `rg`, `sg` (nebo `npm`) a `gh` v `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Spouštění těchto binárních souborů a spustitelných souborů Greph jako podprocesů |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Paralelní pracovní procesy pro `-j N` / `jobs: N` |

`ToolResolver` a `CommandRunner` slouží pouze nástrojům pro porovnávání: generátoru matice funkcí, testovacímu rámci benchmarků a testovacímu rámci oracle. `Greph::search*()`, `Greph::rewriteAst()`, tvůrci indexů a čtyři spustitelné soubory je nikdy nevolají.

Fond pracovních procesů kontroluje `function_exists('pcntl_fork')` před vytvořením nového procesu. Funkce uvedená v `disable_functions` podle PHP neexistuje, takže na takovém hostiteli se každý blok zpracuje v aktuálním procesu se stejným výsledkem jako `-j 1`. Viz [Paralelní pracovní procesy](https://greph.inline0.dev/cs/docs/advanced/parallel).

Když jsou všechny funkce `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` a `pcntl_fork` zakázané, vyhledávání textu pomocí `jobs: 4`, přepisování AST, `greph-index build`, `greph-index ast-cache build` a `search` i obaly `rg` a `sg` fungují normálně.

## Pomocné nástroje bez procesů

Pokud do takového hostitele vkládáte pomocné nástroje pro porovnávání, vytvořte je s výslovnou zásadou zakazující procesy:

```php
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
```

Tyto instance při chybě bezpečně selžou: každé vyhledání nebo příkaz vyvolá `RuntimeException` místo pokusu spustit proces.

```text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
```

Předejte je všude, kde se přijímá `ToolResolver` nebo `CommandRunner`, například jako argumenty `toolResolver:` a `commandRunner:` v `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generátor se pak dokončí bez spuštění procesu, ale nedokáže vytvořit užitečný report: sondy vůči nástrojům upstream se označí jako `Unavailable` a sondy spouštějící vlastní spustitelné soubory Greph jako `Fail`, protože každá sonda je příkaz. Generujte [matici funkcí](https://greph.inline0.dev/cs/docs/advanced/feature-matrix) na počítači, který dovoluje spouštět procesy.
