
# الاستضافة المقيّدة بالعمليات

تعطّل الاستضافات المشتركة والحاويات المحصّنة وبعض منصات PaaS وظائف العمليات من خلال `disable_functions`. تعمل عمليات البحث وإعادة الكتابة والفهرسة في Greph داخل العملية PHP (وتُنشئ عمليات الفحص المتوازية نسخًا عاملة متفرعة منها متى أمكن)، لذا تظل تعمل في تلك البيئات.

## ما الذي يبدأ العمليات

| الرمز | الدالة | الاستخدام |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | تحديد مواقع ملفات `grep` و`rg` و`sg` (أو `npm`) و`gh` الخارجية على `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | تشغيل تلك الملفات التنفيذية وبرامج Greph الفرعية |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | العمال المتوازون لـ `-j N` / `jobs: N` |

يُستخدم `ToolResolver` و`CommandRunner` في أدوات المقارنة فقط: مولّد مصفوفة الميزات، وأداة قياس الأداء، وأداة اختبار المرجع. ولا تستدعيها `Greph::search*()` و`Greph::rewriteAst()` ومنشئات الفهرس والبرامج التنفيذية الأربعة مطلقًا.

يتحقق تجمع العمال من `function_exists('pcntl_fork')` قبل إنشاء عملية متفرعة. لا تكون الدالة المدرجة في `disable_functions` موجودة من منظور PHP، لذا تعمل كل قطعة على هذا النوع من المضيفات داخل العملية، بالنتيجة نفسها التي يحققها `-j 1`. راجع [العمال المتوازون](https://greph.inline0.dev/ar/docs/advanced/parallel).

عند تعطيل `proc_open` و`shell_exec` و`exec` و`system` و`passthru` و`popen` و`pcntl_fork` جميعًا، يعمل البحث النصي باستخدام `jobs: 4` وإعادة كتابة AST و`greph-index build` و`greph-index ast-cache build` و`search`، بالإضافة إلى أغلفتي `rg` و`sg`، بصورة طبيعية.

## المساعدات التي لا تبدأ عمليات

عند تضمين مساعدات المقارنة في مضيف كهذا، أنشئها باستخدام سياسة صريحة لتعطيل العمليات:

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

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

ترفض هذه النسخ العمل بأمان: كل عملية بحث أو أمر ترمي `RuntimeException` بدلًا من محاولة بدء عملية.

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

مرّرها أينما يُقبل `ToolResolver` أو `CommandRunner`، مثل وسيطي `toolResolver:` و`commandRunner:` في `Greph\FeatureMatrix\FeatureMatrixGenerator`. عندئذ يكتمل المولّد دون بدء عملية، لكنه لن ينتج تقريرًا مفيدًا: تُسجّل الاختبارات المسبقة لأدوات المنبع على أنها `Unavailable`، وتُسجّل الاختبارات التي تشغّل ملفات Greph التنفيذية على أنها `Fail`، لأن كل اختبار مسبق هو أمر. أنشئ [مصفوفة الميزات](https://greph.inline0.dev/ar/docs/advanced/feature-matrix) على جهاز يسمح بتشغيل العمليات.
