4. サンドボックスを実行する
前のセクションでは、サンドボックス環境、ポリシー、エグゼキュータと Sandboxee を準備しました。次のステップでは、Sandbox2
オブジェクトを作成して実行します。
Run synchronously
サンドボックスは同期的に実行できるため、結果が得られるまでブロックされます。次のコード スニペットは、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();
Run asynchronously
サンドボックスを非同期で実行することもできます。これにより、結果が得られるまでブロックされません。これは、たとえば 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();