
# Folyamatkorlátozott gazdagépek

A megosztott tárhelyek, a megerősített konténerek és egyes PaaS-platformok letiltják a folyamatkezelő függvényeket a `disable_functions` használatával. A Greph keresési, átírási és indexelési műveletei a PHP folyamaton belül futnak (a párhuzamos vizsgálatok, ha lehet, munkafolyamatokat indítanak belőle), ezért ezeken a környezeteken is működnek.

## Mi indít folyamatokat

| Kód | Függvény | Felhasználás |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | A külső `grep`, `rg`, `sg` (vagy `npm`) és `gh` binárisok megkeresése a `PATH` helyen |
| `Greph\Support\CommandRunner` | `proc_open()` | E binárisok és a Greph futtatható fájlok alfolyamatként való futtatása |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Párhuzamos munkafolyamatok a `-j N` / `jobs: N` számára |

A `ToolResolver` és a `CommandRunner` kizárólag az összehasonlító eszközöket szolgálja: a funkciómátrix-generátort, a benchmarkkeretrendszert és az oracle-tesztkeretrendszert. A `Greph::search*()`, a `Greph::rewriteAst()`, az indexépítők és a négy futtatható fájl soha nem hívja meg őket.

A munkafolyamat-készlet a fork előtt ellenőrzi a `function_exists('pcntl_fork')` értékét. A `disable_functions` listáján szereplő függvény a PHP szemszögéből nem létezik, ezért ilyen gazdagépen minden részfolyamat a folyamaton belül fut, ugyanazzal az eredménnyel, mint a `-j 1` esetén. Lásd: [Párhuzamos munkafolyamatok](https://greph.inline0.dev/hu/docs/advanced/parallel).

Ha a `proc_open`, a `shell_exec`, a `exec`, a `system`, a `passthru`, a `popen` és a `pcntl_fork` mind le van tiltva, a szöveges keresés a `jobs: 4` használatával, az AST átírása, a `greph-index build`, a `greph-index ast-cache build` és a `search`, valamint a `rg` és a `sg` burkolója is rendesen működik.

## Folyamatok nélkül működő segédeszközök

Ha ilyen gazdagépbe ágyazza be az összehasonlító segédeszközöket, kifejezetten folyamatok nélküli házirenddel hozza létre őket:

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

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

Ezek a példányok biztonságosan leállnak: minden keresés vagy parancs `RuntimeException` hibát dob, és nem próbál folyamatot indítani.

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

Adja át őket minden olyan helyen, ahol `ToolResolver` vagy `CommandRunner` használható, például a `Greph\FeatureMatrix\FeatureMatrixGenerator` `toolResolver:` és `commandRunner:` argumentumaként. A generátor így folyamat indítása nélkül lefut, de használható jelentést nem tud készíteni: a felfelé irányuló eszközökkel végzett próbák eredménye `Unavailable`, a Greph saját futtatható fájljait futtató próbáké pedig `Fail` lesz, mivel minden próba egy parancs. A [funkciómátrix](https://greph.inline0.dev/hu/docs/advanced/feature-matrix) generálását olyan gépen végezze, amely engedélyezi a folyamatokat.
