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와 통신할 때 유용합니다. 아래의 코드 스니펫은 이러한 사용 사례를 보여줍니다. 자세한 예는 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();