
# Prosessirajoitetut palvelimet

Jaetussa hosting-ympäristössä, kovennetuissa säilöissä ja joillakin PaaS-alustoilla prosessifunktiot poistetaan käytöstä `disable_functions` avulla. Greph-haku-, uudelleenkirjoitus- ja indeksointitoiminnot suoritetaan PHP-prosessin sisällä (rinnakkaistarkistukset luovat siitä työntekijäkopioita, kun mahdollista), joten ne toimivat myös tällaisissa ympäristöissä.

## Mitkä käynnistävät prosesseja

| Koodi | Funktio | Käyttötarkoitus |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Ulkoisten `grep`-, `rg`-, `sg`- (tai `npm`-) ja `gh`-binäärien etsiminen `PATH`-polusta |
| `Greph\Support\CommandRunner` | `proc_open()` | Näiden binäärien ja Greph-suoritustiedostojen suorittaminen alipro­sesseina |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Rinnakkaistyöntekijät: `-j N` / `jobs: N` |

`ToolResolver` ja `CommandRunner` palvelevat vain vertailutyökaluja: ominaisuusmatriisin luontia, vertailuajuria ja oraakkelitestiajuria. `Greph::search*()`, `Greph::rewriteAst()`, indeksien rakentajat ja neljä suoritustiedostoa eivät koskaan kutsu niitä.

Työntekijäpooli tarkistaa `function_exists('pcntl_fork')` ennen haarautumista. `disable_functions`-luettelossa olevaa funktiota ei ole olemassa PHP:n näkökulmasta, joten tällaisella isännällä jokainen osuus suoritetaan prosessin sisällä samalla tuloksella kuin `-j 1`. Katso [Rinnakkaistyöntekijät](https://greph.inline0.dev/fi/docs/advanced/parallel).

Kun `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` ja `pcntl_fork` on poistettu käytöstä, tekstihaku `jobs: 4`:llä, AST-uudelleenkirjoitus, `greph-index build`, `greph-index ast-cache build` ja `search` sekä `rg`- ja `sg`-kääreet toimivat normaalisti.

## Prosessittömät apurit

Kun sisällytät vertailuapureita tällaiseen isäntään, luo ne eksplisiittisellä prosessit käytöstä poistavalla käytännöllä:

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

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

Nämä instanssit sulkeutuvat turvallisesti: jokainen haku tai komento heittää `RuntimeException`-poikkeuksen sen sijaan, että yrittäisi käynnistää prosessin.

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

Välitä ne kaikkialle, missä hyväksytään `ToolResolver` tai `CommandRunner`, esimerkiksi `Greph\FeatureMatrix\FeatureMatrixGenerator`:n argumenteiksi `toolResolver:` ja `commandRunner:`. Generaattori suoritetaan tällöin loppuun käynnistämättä prosessia, mutta se ei voi tuottaa hyödyllistä raporttia: ylätason työkaluihin kohdistuvat kokeet ilmoitetaan tilassa `Unavailable` ja kokeet, joissa suoritetaan Greph:n omia suoritustiedostoja, tilassa `Fail`, koska jokainen koe on komento. Luo [ominaisuusmatriisi](https://greph.inline0.dev/fi/docs/advanced/feature-matrix)] koneella, jolla prosessit ovat sallittuja.
