4. 執行沙箱

在前幾節中,您已備妥沙箱環境、政策、執行者和沙箱。下一步是建立並執行 Sandbox2 物件。

同步執行

沙箱可以同步執行,因此在產生結果之前會進行封鎖。以下程式碼片段示範 Sandbox2 物件及其同步執行作業的例項。如需更詳細的範例,請參閱靜態一節。

#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工具

#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();