
# Hosts met procesbeperkingen

Gedeelde hosting, geharde containers en sommige PaaS-platforms schakelen procesfuncties uit via `disable_functions`. De zoek-, herschrijf- en indexbewerkingen van Greph draaien binnen het PHP-proces (parallelle scans forken waar mogelijk werkkopieën daarvan), zodat ze daar blijven werken.

## Processen starten

| Code | Functie | Gebruikt voor |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | De externe `grep`, `rg`, `sg` (of `npm`) en `gh`-binaire bestanden zoeken op de `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Die binaire bestanden en de Greph-uitvoerbare bestanden uitvoeren als subprocessen |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Parallelle workers voor `-j N` / `jobs: N` |

`ToolResolver` en `CommandRunner` worden alleen gebruikt door de vergelijkingstools: de generator van de functiematrix, de benchmarkharnas en het orakeltestharnas. `Greph::search*()`, `Greph::rewriteAst()`, de indexbouwers en de vier uitvoerbare bestanden roepen ze nooit aan.

De workerpool controleert `function_exists('pcntl_fork')` voordat deze forkt. Een functie die in `disable_functions` staat vermeld, bestaat niet vanuit het oogpunt van PHP. Op zo'n host wordt elk deel daarom binnen hetzelfde proces uitgevoerd, met hetzelfde resultaat als `-j 1`. Zie [Parallel Workers](https://greph.inline0.dev/nl/docs/advanced/parallel).

Zelfs als `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` en `pcntl_fork` allemaal zijn uitgeschakeld, blijven tekstzoeken met `jobs: 4`, AST-herschrijven, `greph-index build`, `greph-index ast-cache build` en `search`, plus de wrappers `rg` en `sg` normaal werken.

## Helpers voor uitgeschakelde processen

Wanneer u de vergelijkingshelpers in zo'n host insluit, maakt u ze aan met een expliciet beleid voor uitgeschakelde processen:

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

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

Deze instanties weigeren standaard: elke zoekopdracht of opdracht veroorzaakt een `RuntimeException` in plaats van te proberen een proces te starten.

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

Geef ze door waar een `ToolResolver` of `CommandRunner` wordt geaccepteerd, bijvoorbeeld als de argumenten `toolResolver:` en `commandRunner:` van `Greph\FeatureMatrix\FeatureMatrixGenerator`. De generator wordt dan uitgevoerd zonder een proces te starten, maar kan geen bruikbaar rapport produceren: probes voor de upstream-tools worden gerapporteerd als `Unavailable` en probes die de eigen uitvoerbare bestanden van Greph uitvoeren als `Fail`, omdat elke probe een opdracht is. Genereer de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix) op een machine waarop processen zijn toegestaan.
