
# Gazde cu procese restricționate

Găzduirea partajată, containerele securizate și unele platforme PaaS dezactivează funcțiile de proces prin `disable_functions`. Operațiile de căutare, rescriere și indexare ale Greph rulează în procesul PHP (scanările paralele creează copii worker ale acestuia când pot), așa că funcționează în continuare în aceste medii.

## Ce pornește procese

| Cod | Funcție | Utilizare |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Localizarea binarelor externe `grep`, `rg`, `sg` (sau `npm`) și `gh` pe `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Rularea acelor binare și a executabilelor Greph ca subprocese |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Workeri paraleli pentru `-j N` / `jobs: N` |

`ToolResolver` și `CommandRunner` sunt folosite doar de instrumentele de comparare: generatorul matricei de funcționalități, cadrul de benchmark și cadrul de testare oracle. `Greph::search*()`, `Greph::rewriteAst()`, constructorii de indexuri și cele patru executabile nu le apelează niciodată.

Pool-ul de workeri verifică `function_exists('pcntl_fork')` înainte de a crea procese. O funcție listată în `disable_functions` nu există din perspectiva PHP, așa că pe o astfel de gazdă fiecare fragment rulează în proces, cu același rezultat ca `-j 1`. Consultați [Workeri paraleli](https://greph.inline0.dev/ro/docs/advanced/parallel).

Cu `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` și `pcntl_fork` toate dezactivate, căutarea textului cu `jobs: 4`, rescrierea AST, `greph-index build`, `greph-index ast-cache build` și `search`, precum și wrapper-ele `rg` și `sg` funcționează normal.

## Ajutoare pentru modul fără procese

Când încorporați ajutoarele de comparare într-o astfel de gazdă, construiți-le cu o politică explicită fără procese:

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

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

Aceste instanțe eșuează în siguranță: fiecare căutare sau comandă aruncă o `RuntimeException` în loc să încerce să pornească un proces.

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

Transmiteți-le oriunde este acceptat un `ToolResolver` sau `CommandRunner`, de exemplu ca argumente `toolResolver:` și `commandRunner:` ale `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generatorul se încheie fără să pornească un proces, dar nu poate produce un raport util: verificările instrumentelor din amonte sunt raportate ca `Unavailable`, iar cele care rulează executabilele proprii ale Greph ca `Fail`, deoarece fiecare verificare este o comandă. Generați [matricea de funcționalități](https://greph.inline0.dev/ro/docs/advanced/feature-matrix) pe o mașină care permite procesele.
