
# Süreç Kısıtlı Sunucular

Paylaşımlı barındırma, güvenliği sıkılaştırılmış kapsayıcılar ve bazı PaaS platformları, `disable_functions` üzerinden süreç işlevlerini devre dışı bırakır. Greph arama, yeniden yazma ve dizin işlemlerini PHP sürecinde yürütür (paralel taramalar mümkün olduğunda bu sürecin çalışan kopyalarını oluşturur); bu nedenle bu ortamlarda çalışmaya devam eder.

## Süreç başlatanlar

| Kod | İşlev | Kullanım amacı |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Harici `grep`, `rg`, `sg` (veya `npm`) ve `gh` ikili dosyalarını `PATH` üzerinde bulma |
| `Greph\Support\CommandRunner` | `proc_open()` | Bu ikili dosyaları ve Greph çalıştırılabilir dosyalarını alt süreçler olarak çalıştırma |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | `-j N` / `jobs: N` için paralel çalışanlar |

`ToolResolver` ve `CommandRunner` yalnızca karşılaştırma araçları tarafından kullanılır: özellik matrisi oluşturucu, kıyaslama çatısı ve doğruluk testi çatısı. `Greph::search*()`, `Greph::rewriteAst()`, dizin oluşturucular ve dört çalıştırılabilir dosya bunları hiçbir zaman çağırmaz.

Çalışan havuzu, süreç oluşturmadan önce `function_exists('pcntl_fork')` değerini denetler. `disable_functions` içinde listelenen bir işlev, PHP açısından mevcut değildir; bu nedenle böyle bir sunucuda her parça, `-j 1` ile aynı sonucu verecek şekilde işlem içinde çalışır. [Paralel Çalışanlar](https://greph.inline0.dev/tr/docs/advanced/parallel) bölümüne bakın.

`proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` ve `pcntl_fork` tümüyle devre dışı olsa da `jobs: 4` ile metin araması, AST yeniden yazma, `greph-index build`, `greph-index ast-cache build` ve `search` ile `rg` ve `sg` sarmalayıcıları normal şekilde çalışır.

## Süreçlerin devre dışı olduğu yardımcılar

Karşılaştırma yardımcılarını böyle bir sunucuya yerleştirirken, süreçlerin devre dışı olduğu bir ilkeyi açıkça belirterek oluşturun:

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

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

Bu örnekler güvenli biçimde başarısız olur: her arama veya komut, süreç başlatmayı denemek yerine bir `RuntimeException` hatası fırlatır.

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

Bunları `ToolResolver` veya `CommandRunner` kabul edilen her yerde, örneğin `Greph\FeatureMatrix\FeatureMatrixGenerator` öğesinin `toolResolver:` ve `commandRunner:` argümanlarında kullanın. Oluşturucu böylece süreç başlatmadan tamamlanır ancak yararlı bir rapor üretemez: yukarı akış araçlarına yönelik yoklamalar `Unavailable`, Greph aracının kendi çalıştırılabilir dosyalarını çalıştıran yoklamalar ise `Fail` olarak raporlanır; çünkü her yoklama bir komuttur. [özellik matrisi](https://greph.inline0.dev/tr/docs/advanced/feature-matrix) öğesini süreçlere izin verilen bir makinede oluşturun.
