4. サンドボックスを実行する

前のセクションでは、サンドボックス化された環境、ポリシー、エグゼキュータ、および Sandboxee を用意しました。次のステップでは、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 と通信する場合などに役立ちます。以下のコード スニペットは、このユースケースを示しています。より詳細な例については、crc4tool をご覧ください。

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