
# Gostitelji z omejenimi procesi

Pri deljenem gostovanju, utrjenih vsebnikih in nekaterih platformah PaaS so procesne funkcije onemogočene prek `disable_functions`. Iskanje, prepisovanje in indeksiranje v Greph potekajo znotraj procesa PHP (vzporedni pregledi po možnosti razvejijo delovne kopije), zato tam še vedno delujejo.

## Kaj zažene procese

| Koda | Funkcija | Uporaba |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Iskanje zunanjih binarnih datotek `grep`, `rg`, `sg` (ali `npm`) in `gh` v `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Zagon teh binarnih datotek in izvedljivih datotek Greph kot podprocesov |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Vzporedni delavci za `-j N` / `jobs: N` |

`ToolResolver` in `CommandRunner` uporabljajo samo primerjalna orodja: generator matrike funkcij, izvajalnik primerjalnih testov in izvajalnik testov z referenčnim orodjem. `Greph::search*()`, `Greph::rewriteAst()`, gradniki indeksov in štiri izvedljive datoteke jih nikoli ne kličejo.

Skupina delavcev pred razvejitvijo preveri `function_exists('pcntl_fork')`. Funkcija, navedena v `disable_functions`, za PHP ne obstaja, zato se na takem gostitelju vsi deli obdelajo znotraj procesa, z enakim rezultatom kot pri `-j 1`. Oglejte si [Vzporedni delavci](https://greph.inline0.dev/sl/docs/advanced/parallel).

Tudi če so `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` in `pcntl_fork` onemogočeni, iskanje besedila z `jobs: 4`, prepis AST, `greph-index build`, `greph-index ast-cache build` in `search` ter ovojniki `rg` in `sg` delujejo normalno.

## Pripomočki brez procesov

Ko primerjalne pripomočke vdelate v tak gostitelj, jih ustvarite z izrecno politiko onemogočenih procesov:

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

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

Ti primerki ob napaki prekinejo izvajanje: vsako iskanje ali ukaz sproži `RuntimeException`, namesto da bi poskusil zagnati proces.

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

Posredujte jih povsod, kjer je sprejet `ToolResolver` ali `CommandRunner`, na primer kot argumenta `toolResolver:` in `commandRunner:` za `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generator se nato zaključi, ne da bi zagnal proces, vendar ne more ustvariti uporabnega poročila: preverjanja za orodja v zgornjem toku so navedena kot `Unavailable`, preverjanja, ki izvajajo lastne izvedljive datoteke Greph, pa kot `Fail`, saj je vsako preverjanje ukaz. Matrico funkcij ustvarite na računalniku, ki dovoljuje procese: [matrika funkcij](https://greph.inline0.dev/sl/docs/advanced/feature-matrix).
