4. เรียกใช้แซนด์บ็อกซ์
ในส่วนก่อนหน้า คุณได้เตรียมสภาพแวดล้อมแซนด์บ็อกซ์ นโยบาย และ
Executor และ Sandboxee ขั้นตอนถัดไปคือการสร้างออบเจ็กต์ Sandbox2
และเรียกใช้
เรียกใช้แบบพร้อมกัน
แซนด์บ็อกซ์สามารถทำงานแบบซิงโครนัสได้ จึงจะบล็อกจนกว่าจะมีผลลัพธ์ ข้อมูลโค้ดด้านล่างแสดงการเริ่มต้นออบเจ็กต์ Sandbox2
และการดำเนินการแบบซิงโครนัส ดูตัวอย่างโดยละเอียดเพิ่มเติมได้ที่
static
#include "sandboxed_api/sandbox2/sandbox2.h"
sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run(); // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();
เรียกใช้แบบไม่พร้อมกัน
นอกจากนี้ คุณยังเรียกใช้แซนด์บ็อกซ์แบบไม่พร้อมกันได้ด้วย ซึ่งจะไม่บล็อกจนกว่าจะมี ผลลัพธ์ ซึ่งมีประโยชน์ เช่น เมื่อสื่อสารกับ Sandboxee ข้อมูลโค้ดด้านล่างแสดงกรณีการใช้งานนี้ ดูตัวอย่างแบบละเอียดเพิ่มเติมได้ที่ crc4 และ tool
#include "sandboxed_api/sandbox2/sandbox2.h"
sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
// Communicate with sandboxee, use s2.Kill() to kill it if needed
// ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();