
# Host dengan Proses Terbatas

Hosting bersama, container yang diperketat keamanannya, dan beberapa platform PaaS menonaktifkan fungsi proses melalui `disable_functions`. Operasi pencarian, penulisan ulang, dan pengindeksan Greph berjalan di dalam proses PHP (pemindaian paralel melakukan fork salinan pekerja jika memungkinkan), sehingga tetap berfungsi di sana.

## Proses yang dijalankan

| Kode | Fungsi | Digunakan untuk |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Menemukan biner eksternal `grep`, `rg`, `sg` (atau `npm`) dan `gh` di `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Menjalankan biner tersebut dan executable Greph sebagai subproses |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Pekerja paralel untuk `-j N` / `jobs: N` |

`ToolResolver` dan `CommandRunner` hanya digunakan oleh perangkat bantu perbandingan: generator matriks fitur, harness benchmark, dan harness pengujian oracle. `Greph::search*()`, `Greph::rewriteAst()`, pembuat indeks, dan keempat executable tidak pernah memanggilnya.

Pool pekerja memeriksa `function_exists('pcntl_fork')` sebelum melakukan fork. Fungsi yang tercantum di `disable_functions` dianggap tidak ada oleh PHP, jadi pada host seperti itu setiap potongan berjalan dalam proses yang sama, dengan hasil yang sama seperti `-j 1`. Lihat [Pekerja Paralel](https://greph.inline0.dev/id/docs/advanced/parallel).

Dengan `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen`, dan `pcntl_fork` semuanya dinonaktifkan, pencarian teks dengan `jobs: 4`, penulisan ulang AST, `greph-index build`, `greph-index ast-cache build`, dan `search`, serta wrapper `rg` dan `sg` tetap berjalan normal.

## Helper tanpa proses

Saat menyematkan helper perbandingan di host seperti itu, buat helper dengan kebijakan proses dinonaktifkan secara eksplisit:

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

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

Instans ini gagal dengan aman: setiap pencarian atau perintah memunculkan `RuntimeException` alih-alih mencoba memulai proses.

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

Teruskan ke tempat mana pun yang menerima `ToolResolver` atau `CommandRunner`, misalnya argumen `toolResolver:` dan `commandRunner:` dari `Greph\FeatureMatrix\FeatureMatrixGenerator`. Generator akan selesai tanpa memulai proses, tetapi tidak dapat menghasilkan laporan yang berguna: probe terhadap tool upstream dilaporkan sebagai `Unavailable` dan probe yang menjalankan executable milik Greph sebagai `Fail`, karena setiap probe merupakan perintah. Buat [matriks fitur](https://greph.inline0.dev/id/docs/advanced/feature-matrix) di mesin yang mengizinkan proses.
