
# Värdar med processbegränsningar

Delad hosting, härdade containrar och vissa PaaS-plattformar inaktiverar processfunktioner via `disable_functions`. Grephs sök-, omskrivnings- och indexeringsåtgärder körs inuti processen PHP (parallella genomsökningar förgrenar arbetskopior av den när det går), så de fortsätter att fungera där.

## Vad startar processer

| Kod | Funktion | Används för |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Hitta de externa binärfilerna `grep`, `rg`, `sg` (eller `npm`) och `gh` på `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Köra dessa binärfiler och de körbara filerna Greph som underprocesser |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Parallella arbetare för `-j N` / `jobs: N` |

`ToolResolver` och `CommandRunner` används bara av jämförelseverktygen: matrisgeneratorn för funktioner, benchmark-harnessen och oracle-testharnessen. `Greph::search*()`, `Greph::rewriteAst()`, indexbyggarna och de fyra körbara filerna anropar dem aldrig.

Arbetarpoolen kontrollerar `function_exists('pcntl_fork')` innan den förgrenar en process. En funktion som listas i `disable_functions` finns inte ur PHPs perspektiv, så på en sådan värd körs varje del i processen, med samma resultat som `-j 1`. Se [Parallella arbetare](https://greph.inline0.dev/sv/docs/advanced/parallel).

När `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` och `pcntl_fork` alla är inaktiverade fungerar textsökning med `jobs: 4`, AST-omskrivning, `greph-index build`, `greph-index ast-cache build` och `search` samt omslagen `rg` och `sg` som vanligt.

## Hjälpfunktioner utan processer

När du bäddar in jämförelsehjälpfunktionerna i en sådan värd skapar du dem med en uttrycklig policy för inaktiverade processer:

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

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

Dessa instanser misslyckas säkert: varje uppslagning eller kommando kastar ett `RuntimeException` i stället för att försöka starta en process.

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

Skicka dem dit ett `ToolResolver` eller `CommandRunner` godtas, till exempel som argumenten `toolResolver:` och `commandRunner:` i `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generatorn kör då klart utan att starta en process, men den kan inte skapa någon användbar rapport: sonder mot uppströmsverktygen rapporteras som `Unavailable` och sonder som kör Grephs egna körbara filer som `Fail`, eftersom varje sond är ett kommando. Skapa [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix) på en maskin som tillåter processer.
