
# Hosty z ograniczonymi procesami

Hosting współdzielony, zabezpieczone kontenery i niektóre platformy PaaS wyłączają funkcje procesów za pomocą `disable_functions`. Operacje wyszukiwania, przepisywania i indeksowania w Greph działają wewnątrz procesu PHP (skanowanie równoległe tworzy kopie robocze przez fork, jeśli to możliwe), więc nadal działają w takim środowisku.

## Co uruchamia procesy

| Kod | Funkcja | Zastosowanie |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Lokalizowanie zewnętrznych plików binarnych `grep`, `rg`, `sg` (lub `npm`) i `gh` w `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Uruchamianie tych plików binarnych oraz plików wykonywalnych Greph jako podprocesów |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Równoległe procesy robocze dla `-j N` / `jobs: N` |

`ToolResolver` i `CommandRunner` służą wyłącznie narzędziom porównawczym: generatorowi macierzy funkcji, modułowi testów wydajności i modułowi testów oracle. `Greph::search*()`, `Greph::rewriteAst()`, kreatory indeksów i cztery pliki wykonywalne nigdy ich nie wywołują.

Pula procesów roboczych sprawdza `function_exists('pcntl_fork')` przed wykonaniem fork. Funkcja wymieniona w `disable_functions` nie istnieje z punktu widzenia PHP, więc na takim hoście każdy fragment działa w bieżącym procesie, z takim samym wynikiem jak `-j 1`. Zobacz [Procesy równoległe](https://greph.inline0.dev/pl/docs/advanced/parallel).

Gdy `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` i `pcntl_fork` są wyłączone, wyszukiwanie tekstu za pomocą `jobs: 4`, przepisywanie AST, `greph-index build`, `greph-index ast-cache build` i `search` oraz opakowania `rg` i `sg` działają normalnie.

## Pomocnicze narzędzia działające bez procesów

Osadzając pomocnicze narzędzia porównawcze w takim środowisku, twórz je z jawną polityką wyłączenia procesów:

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

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

Te instancje domyślnie odmawiają działania: każde wyszukiwanie lub polecenie zgłasza `RuntimeException` zamiast próbować uruchomić proces.

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

Przekazuj je wszędzie tam, gdzie akceptowany jest `ToolResolver` lub `CommandRunner`, na przykład jako argumenty `toolResolver:` i `commandRunner:` w `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generator kończy działanie bez uruchamiania procesu, ale nie może utworzyć użytecznego raportu: wyniki testów narzędzi nadrzędnych są oznaczane jako `Unavailable`, a testy uruchamiające własne pliki wykonywalne Greph jako `Fail`, ponieważ każdy test jest poleceniem. Wygeneruj [macierz funkcji](https://greph.inline0.dev/pl/docs/advanced/feature-matrix) na komputerze, na którym można uruchamiać procesy.
