နောက်ခံ Exec + Process ကိရိယာ¶
process tool သည် ထို background sessions များကို စီမံခန့်ခွဲပါသည်။ အမှန်တကယ် TTY လိုအပ်ပါသလား?
exec ကိရိယာ¶
အဓိက ပါရာမီတာများ:
command(လိုအပ်သည်)yieldMs(မူလတန်ဖိုး 10000): ဤနှောင့်နှေးချိန်ပြီးပါက အလိုအလျောက် နောက်ခံသို့ ပြောင်းသည်background(bool): ချက်ချင်း နောက်ခံတွင် လည်ပတ်စေသည်timeout(စက္ကန့်များ၊ မူလတန်ဖိုး 1800): ဤအချိန်ကန့်သတ်ပြီးပါက ပရိုဆက်ကို ပိတ်သတ်မည်elevated(bool): elevated mode ကို ဖွင့်ထား/ခွင့်ပြုထားပါက ဟို့စ်ပေါ်တွင် လည်ပတ်စေသည်pty: trueကို သတ်မှတ်ပါ။exec/processtools များအပြင်ဘက်တွင် ကြာရှည်အလုပ်လုပ်သော child processes များကို spawn လုပ်ပါက (ဥပမာ CLI respawns သို့မဟုတ် gateway helpers) termination signals များကို forward လုပ်နိုင်ရန်နှင့် exit/error ဖြစ်သည့်အခါ listeners များကို ဖြုတ်ချနိုင်ရန် child-process bridge helper ကို attach လုပ်ပါ။workdir,env
အပြုအမူ:
- Foreground အဖြစ် လည်ပတ်ပါက ထွက်လာသော အထွက်ကို တိုက်ရိုက် ပြန်ပေးသည်။
- နောက်ခံသို့ ပြောင်းသွားပါက (အတိအလင်း သို့မဟုတ် timeout ကြောင့်) ကိရိယာသည်
status: "running"+sessionIdနှင့် အတိုချုံး tail ကို ပြန်ပေးသည်။ - ဆက်ရှင်ကို poll လုပ်မည် သို့မဟုတ် clear လုပ်မည် မတိုင်မီ အထွက်ကို မှတ်ဉာဏ်အတွင်း ထိန်းသိမ်းထားသည်။
processကိရိယာကို ခွင့်မပြုထားပါကexecသည် synchronous အဖြစ် လည်ပတ်ပြီးyieldMs/backgroundကို လျစ်လျူရှုသည်။
Child process ချိတ်ဆက်ခြင်း¶
ဤအရာသည် systemd ပေါ်တွင် orphaned processes များကို ရှောင်ရှားစေပြီး platform များအကြား shutdown အပြုအမူကို တစ်ပြေးညီ ဖြစ်စေပါသည်။ OpenClaw သည် LAN အတွင်းသာ အသုံးပြုရန် အဆင်ပြေစေရန် Bonjour (mDNS / DNS‑SD) ကို အသုံးပြုပြီး active Gateway (WebSocket endpoint) ကို ရှာဖွေပါသည်။
ပတ်ဝန်းကျင် အစားထိုး သတ်မှတ်ချက်များ:
PI_BASH_YIELD_MS: မူလ yield (ms)PI_BASH_MAX_OUTPUT_CHARS: မှတ်ဉာဏ်အတွင်း အထွက် အကန့်အသတ် (chars)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: stream တစ်ခုချင်းစီအတွက် pending stdout/stderr အကန့်အသတ် (chars)PI_BASH_JOB_TTL_MS: ပြီးဆုံးပြီးသော ဆက်ရှင်များအတွက် TTL (ms, 1m–3h အတွင်း ကန့်သတ်ထားသည်)
Config (ဦးစားပေး):
tools.exec.backgroundMs(မူလတန်ဖိုး 10000)tools.exec.timeoutSec(မူလတန်ဖိုး 1800)tools.exec.cleanupMs(မူလတန်ဖိုး 1800000)tools.exec.notifyOnExit(မူလတန်ဖိုး true): နောက်ခံထားသော exec တစ်ခု exit ဖြစ်သည့်အခါ system event ကို queue ထဲသို့ ထည့်ပြီး request heartbeat ကို တောင်းဆိုသည်။
process tool¶
လုပ်ဆောင်ချက်များ:
list: လည်ပတ်နေသော + ပြီးဆုံးပြီးသော ဆက်ရှင်များpoll: ဆက်ရှင်တစ်ခုအတွက် ထွက်လာသော အသစ်သော အထွက်ကို drain လုပ်သည် (exit status ကိုလည်း အစီရင်ခံသည်)log: စုပေါင်းထားသော အထွက်ကို ဖတ်ရှုသည် (offset+limitကို ပံ့ပိုးသည်)write: stdin ပို့သည် (data, ရွေးချယ်စရာeof)kill: နောက်ခံ ဆက်ရှင်တစ်ခုကို အဆုံးသတ်သည်clear: ပြီးဆုံးပြီးသော ဆက်ရှင်တစ်ခုကို မှတ်ဉာဏ်မှ ဖယ်ရှားသည်remove: လည်ပတ်နေပါက kill လုပ်ပြီး၊ မဟုတ်ပါက ပြီးဆုံးပြီးသားဖြစ်လျှင် clear လုပ်သည်
မှတ်ချက်များ:
- နောက်ခံထားသော ဆက်ရှင်များသာ စာရင်းပြုလုပ်ထားပြီး မှတ်ဉာဏ်အတွင်း သိမ်းဆည်းထားသည်။
- ပရိုဆက် ပြန်လည်စတင်သည့်အခါ ဆက်ရှင်များ ပျောက်ဆုံးသွားသည် (disk persistence မရှိပါ)။
process poll/logကို လည်ပတ်ပြီး ကိရိယာ၏ ရလဒ်ကို မှတ်တမ်းတင်ထားသောအခါမှသာ ဆက်ရှင် log များကို chat history ထဲသို့ သိမ်းဆည်းထားသည်။processသည် agent တစ်ခုချင်းစီအလိုက် သတ်မှတ်ထားပြီး၊ ထို agent မှ စတင်ခဲ့သော ဆက်ရှင်များကိုသာ မြင်နိုင်သည်။process listတွင် လျင်မြန်စွာ စစ်ဆေးနိုင်ရန် အတွက် ဆင်းသက်လာသောname(command verb + target) ပါဝင်သည်။process logသည် လိုင်းအခြေပြုoffset/limitကို အသုံးပြုသည် (offsetကို ချန်ထားပါက နောက်ဆုံး N လိုင်းများကို ရယူသည်)။
ဥပမာများ¶
အချိန်ရှည် လုပ်ငန်းတစ်ခုကို လည်ပတ်ပြီး နောက်မှ poll လုပ်ခြင်း:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
ချက်ချင်း နောက်ခံတွင် စတင်ခြင်း:
{ "tool": "exec", "command": "npm run build", "background": true }
stdin ပို့ခြင်း:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }