การรันเบื้องหลัง + เครื่องมือจัดการโปรเซส¶
OpenClaw รันคำสั่งเชลล์ผ่านเครื่องมือ exec และเก็บงานที่รันเป็นเวลานานไว้ในหน่วยความจำ เครื่องมือ process ใช้จัดการเซสชันเบื้องหลังเหล่านั้น The process tool manages those background sessions.
exec tool¶
พารามิเตอร์หลัก:
command(จำเป็น)yieldMs(ค่าเริ่มต้น 10000): ย้ายไปเบื้องหลังอัตโนมัติหลังดีเลย์นี้background(bool): เริ่มทำงานในเบื้องหลังทันทีtimeout(วินาที, ค่าเริ่มต้น 1800): ยุติโพรเซสหลังหมดเวลาelevated(bool): รันบนโฮสต์หากโหมดยกระดับถูกเปิดใช้งาน/อนุญาต- ต้องการ TTY จริงหรือไม่? ตั้งค่า
pty: true. workdir,env
พฤติกรรม:
- การรันแบบ foreground จะส่งเอาต์พุตกลับโดยตรง
- เมื่อย้ายไปเบื้องหลัง (ระบุชัดเจนหรือจากการหมดเวลา) เครื่องมือจะส่งคืน
status: "running"+sessionIdและส่วนท้ายแบบย่อ - เอาต์พุตจะถูกเก็บไว้ในหน่วยความจำจนกว่าจะมีการโพลหรือเคลียร์เซสชัน
- หากเครื่องมือ
processไม่ได้รับอนุญาตexecจะรันแบบซิงโครนัสและละเว้นyieldMs/background.
การเชื่อมต่อกับโปรเซสลูก¶
เมื่อสปอว์นโพรเซสลูกที่รันยาวนานนอกเครื่องมือ exec/process (เช่น การ respawn ของ CLI หรือ helper ของ Gateway) ให้ผูกตัวช่วยบริดจ์โพรเซสลูกเพื่อให้สัญญาณยุติถูกส่งต่อ และถอดตัวรับฟังเมื่อออก/เกิดข้อผิดพลาด วิธีนี้ช่วยหลีกเลี่ยงโพรเซสกำพร้าบน systemd และทำให้พฤติกรรมการปิดระบบสอดคล้องกันข้ามแพลตฟอร์ม This avoids orphaned processes on systemd and keeps shutdown behavior consistent across platforms.
การแทนค่าด้วย environment:
PI_BASH_YIELD_MS: yield เริ่มต้น (มิลลิวินาที)PI_BASH_MAX_OUTPUT_CHARS: เพดานเอาต์พุตในหน่วยความจำ (ตัวอักษร)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: เพดาน stdout/stderr ที่ค้างอยู่ต่อสตรีม (ตัวอักษร)PI_BASH_JOB_TTL_MS: TTL สำหรับเซสชันที่เสร็จสิ้นแล้ว (มิลลิวินาที, จำกัดไว้ที่ 1 นาที–3 ชั่วโมง)
คอนฟิก (แนะนำ):
tools.exec.backgroundMs(ค่าเริ่มต้น 10000)tools.exec.timeoutSec(ค่าเริ่มต้น 1800)tools.exec.cleanupMs(ค่าเริ่มต้น 1800000)tools.exec.notifyOnExit(ค่าเริ่มต้น true): เข้าคิวอีเวนต์ของระบบ + ขอฮาร์ตบีตเมื่อ exec ที่รันเบื้องหลังออกจากการทำงาน
process tool¶
การกระทำ:
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 บรรทัดสุดท้าย)
ตัวอย่าง¶
รันงานยาวและโพลภายหลัง:
{ "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" }