
# Piiratud protsessitoega hostid

Jagatud hostingu, turvalisemaks muudetud konteinerite ja mõne PaaS-platvormi puhul on protsessifunktsioonid funktsiooni `disable_functions` kaudu keelatud. Greph otsingu-, ümberkirjutus- ja indekseerimistoimingud töötavad protsessis PHP (paralleelsed skannimised käivitavad võimaluse korral selle tööprotsessi koopiad), seega töötavad need ka seal.

## Mis käivitab protsesse

| Kood | Funktsioon | Kasutus |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Välise `grep`, `rg`, `sg` (või `npm`) ja `gh` binaarfailide asukoha leidmine `PATH`-s |
| `Greph\Support\CommandRunner` | `proc_open()` | Nende binaarfailide ja Greph käivitatavate failide käivitamine alamprotsessidena |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Paralleelsed tööprotsessid `-j N` / `jobs: N` jaoks |

`ToolResolver` ja `CommandRunner` kasutatakse ainult võrdlustööriistades: funktsioonimaatriksi generaatoris, võrdlustestide tööriistas ja võrdlustestide kontrolltööriistas. `Greph::search*()`, `Greph::rewriteAst()`, indeksikoostajad ja neli käivitatavat faili ei kutsu neid kunagi.

Tööprotsesside kogum kontrollib enne harunemist `function_exists('pcntl_fork')` olemasolu. `disable_functions` loetletud funktsiooni pole PHP seisukohast olemas, seega käivitatakse sellises keskkonnas kõik osad protsessisiseselt ja saadakse sama tulemus nagu `-j 1` puhul. Vt [Paralleelsed tööprotsessid](https://greph.inline0.dev/et/docs/advanced/parallel).

Kui `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` ja `pcntl_fork` on kõik keelatud, töötavad tekstiotsing funktsiooniga `jobs: 4`, AST ümberkirjutus, `greph-index build`, `greph-index ast-cache build` ja `search` ning `rg` ja `sg` ümbrisklassid endiselt tavapäraselt.

## Protsessideta abifunktsioonid

Kui lisate võrdlusabilised sellisesse keskkonda, looge need selgesõnalise protsessideta poliitikaga:

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

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

Need eksemplarid ei luba vaikimisi tegevust: iga otsing või käsk viskab `RuntimeException`, selle asemel et protsessi käivitada.

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

Edastage need sinna, kus aktsepteeritakse `ToolResolver` või `CommandRunner`, näiteks `Greph\FeatureMatrix\FeatureMatrixGenerator` argumentidena `toolResolver:` ja `commandRunner:`. Seejärel lõpetab generaator töö protsessi käivitamata, kuid ei saa koostada sisukat aruannet: päringuid ülesvoolu tööriistade vastu kajastatakse kui `Unavailable` ja päringuid, mis käivitavad Greph enda käivitatavaid faile, kui `Fail`, sest iga päring on käsk. Looge [funktsioonimaatriks](https://greph.inline0.dev/et/docs/advanced/feature-matrix)] masinas, kus protsessid on lubatud.
