> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# أداة التنفيذ في الخلفية وأداة العمليات

# أداة التنفيذ في الخلفية + أداة العمليات

يقوم OpenClaw بتشغيل أوامر الصدفة عبر أداة `exec` ويحتفظ بالمهام طويلة الأمد في الذاكرة. تدير أداة `process` جلسات الخلفية تلك.

## أداة exec

المعلمات الأساسية:

* `command` (مطلوب)
* `yieldMs` (الافتراضي 10000): الانتقال التلقائي إلى الخلفية بعد هذا التأخير
* `background` (قيمة منطقية): التشغيل في الخلفية فورًا
* `timeout` (بالثواني، الافتراضي 1800): إنهاء العملية بعد انتهاء هذه المهلة
* `elevated` (قيمة منطقية): التشغيل على المضيف إذا كان وضع الامتيازات مُمكّنًا/مسموحًا
* هل تحتاج إلى TTY حقيقي؟ اضبط `pty: true`. تعيين `pty: true`.
* `workdir`، `env`

السلوك:

* عمليات التشغيل في الواجهة الأمامية تُعيد المخرجات مباشرةً.
* عند التشغيل في الخلفية (صراحةً أو بسبب المهلة)، تُعيد الأداة `status: "running"` + `sessionId` وذيلًا قصيرًا.
* يتم الاحتفاظ بالمخرجات في الذاكرة حتى يتم استطلاع الجلسة أو مسحها.
* إذا كانت أداة `process` غير مسموح بها، يعمل `exec` بشكل متزامن ويتجاهل `yieldMs`/`background`.

## سد عملية الأطفال

عند إنشاء عمليات فرعية طويلة الأمد خارج أدوات exec/process (على سبيل المثال، إعادة تشغيل CLI أو مساعدات Gateway)، أرفِق مساعد ربط العمليات الفرعية بحيث يتم تمرير إشارات الإنهاء وفصل المستمعين عند الخروج/الخطأ. يمنع ذلك العمليات اليتيمة على systemd ويحافظ على سلوك إيقاف تشغيل متسق عبر المنصات.

تجاوزات البيئة:

* `PI_BASH_YIELD_MS`: العائد الافتراضي (مللي ثانية)
* `PI_BASH_MAX_OUTPUT_CHARS`: الحد الأقصى للمخرجات في الذاكرة (عدد الأحرف)
* `OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS`: الحد الأقصى للمخرجات المعلّقة stdout/stderr لكل دفق (عدد الأحرف)
* `PI_BASH_JOB_TTL_MS`: مدة الاحتفاظ بالجلسات المنتهية (مللي ثانية، محدودة بين 1 دقيقة و3 ساعات)

التهيئة (المفضلة):

* `tools.exec.backgroundMs` (الافتراضي 10000)
* `tools.exec.timeoutSec` (الافتراضي 1800)
* `tools.exec.cleanupMs` (الافتراضي 1800000)
* `tools.exec.notifyOnExit` (الافتراضي true): إدراج حدث نظام + طلب نبضة قلب عند انتهاء تنفيذ في الخلفية.
* `tools.exec.notifyOnExitEmptySuccess` (القيمة الافتراضية false): عند التفعيل، يتم أيضًا إدراج أحداث إكمال للتشغيلات الخلفية الناجحة التي لم تُنتج أي مخرجات.

## أداة process

الإجراءات:

* `list`: الجلسات الجارية والمنتهية
* `poll`: تفريغ المخرجات الجديدة لجلسة ما (ويُبلّغ أيضًا عن حالة الخروج)
* `log`: قراءة المخرجات المُجمّعة (يدعم `offset` + `limit`)
* `write`: إرسال stdin (`data`، و`eof` اختياري)
* `kill`: إنهاء جلسة في الخلفية
* `clear`: إزالة جلسة منتهية من الذاكرة
* `remove`: الإنهاء إذا كانت قيد التشغيل، وإلا فالمسح إذا كانت منتهية

ملاحظات:

* يتم إدراج الجلسات التي تعمل في الخلفية فقط والاحتفاظ بها في الذاكرة.
* تُفقد الجلسات عند إعادة تشغيل العملية (لا يوجد حفظ على القرص).
* لا تُحفظ سجلات الجلسات في سجل الدردشة إلا إذا قمت بتشغيل `process poll/log` وتم تسجيل نتيجة الأداة.
* `process` مُقيّد لكل وكيل؛ ولا يرى إلا الجلسات التي بدأها ذلك الوكيل.
* يتضمن `process list` قيمة مشتقة هي `name` (فعل الأمر + الهدف) لتسهيل الاستعراض السريع.
* يستخدم `process log` آلية `offset`/`limit` المعتمدة على الأسطر (احذف `offset` لجلب آخر N أسطر).
* عند عدم تحديد كلٍ من `offset` و`limit`، يتم إرجاع آخر 200 سطر مع تضمين تلميح للترقيم.
* عند تحديد `offset` وعدم تحديد `limit`، يتم الإرجاع من `offset` حتى النهاية (دون تقييد بـ 200).

## أمثلة

تشغيل مهمة طويلة والاستطلاع لاحقًا:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
```

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
```

البدء فورًا في الخلفية:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "exec", "command": "npm run build", "background": true }
```

إرسال stdin:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
```
