
# Hostitelia s obmedzenými procesmi

Zdieľaný hosting, zabezpečené kontajnery a niektoré platformy PaaS zakazujú procesové funkcie prostredníctvom `disable_functions`. Vyhľadávanie, prepisovanie a indexovanie v Greph prebieha v procese PHP (paralelné skenovania vytvárajú jeho pracovné kópie, keď je to možné), takže tam naďalej fungujú.

## Čo spúšťa procesy

| Kód | Funkcia | Použitie |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Vyhľadanie externých binárnych súborov `grep`, `rg`, `sg` (alebo `npm`) a `gh` v systéme `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Spúšťanie týchto binárnych súborov a spustiteľných súborov Greph ako podprocesov |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Paralelní pracovníci pre `-j N` / `jobs: N` |

`ToolResolver` a `CommandRunner` slúžia iba na porovnávacie nástroje: generátor matice funkcií, testovací nástroj benchmarkov a testovací nástroj oracle. `Greph::search*()`, `Greph::rewriteAst()`, zostavovače indexov a štyri spustiteľné súbory ich nikdy nevolajú.

Fond pracovníkov pred vytvorením procesu skontroluje `function_exists('pcntl_fork')`. Funkcia uvedená v `disable_functions` z pohľadu PHP neexistuje, takže na takomto hostiteľovi sa každý blok spracuje v rámci procesu, rovnako ako v `-j 1`. Pozrite si [Paralelní pracovníci](https://greph.inline0.dev/sk/docs/advanced/parallel).

Keď sú `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` a `pcntl_fork` zakázané, textové vyhľadávanie pomocou `jobs: 4`, prepisovanie AST, `greph-index build`, `greph-index ast-cache build` a `search`, ako aj obaly `rg` a `sg` fungujú normálne.

## Pomocné nástroje bez procesov

Ak vkladáte porovnávacie pomocné nástroje do takéhoto hostiteľa, vytvorte ich s výslovnou politikou bez procesov:

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

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

Tieto inštancie pri zlyhaní postupujú bezpečne: každé vyhľadanie alebo príkaz vyvolá `RuntimeException` namiesto pokusu spustiť proces.

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

Odovzdajte ich všade tam, kde sa prijíma `ToolResolver` alebo `CommandRunner`, napríklad ako argumenty `toolResolver:` a `commandRunner:` v `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generátor sa potom dokončí bez spustenia procesu, ale nedokáže vytvoriť užitočný report: kontroly nadväzujúcich nástrojov sa označia ako `Unavailable` a kontroly spúšťajúce vlastné spustiteľné súbory Greph ako `Fail`, pretože každá kontrola je príkaz. Matice [funkcií](https://greph.inline0.dev/sk/docs/advanced/feature-matrix) vygenerujte na počítači, ktorý povoľuje spúšťanie procesov.
