4. Запустите песочницу

В предыдущих разделах вы подготовили изолированную среду, политику, исполнителя и песочницу. Следующий шаг — создать объект 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 и инструменте .

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

4. Запустите песочницу

В предыдущих разделах вы подготовили изолированную среду, политику, исполнителя и песочницу. Следующий шаг — создать объект 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 и инструменте .

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