6. Como sair do sandbox

Dependendo de como você executa o sandbox (consulte esta etapa), é necessário ajustar a forma como você encerra o sandbox e, consequentemente, o sandboxee.

Como sair de um sandbox em execução síncrona

Se o sandbox estiver sendo executado de forma síncrona, a função Run só retornará quando o sandboxee for concluído. Portanto, nenhuma outra etapa é necessária para a rescisão. O snippet de código abaixo mostra esse cenário:

Sandbox2::Result result = s2.Run();
LOG(INFO) << "Final execution status: " << result.ToString();

Sair de um sandbox em execução assíncrona

Se o sandbox estiver sendo executado de maneira assíncrona, duas opções estarão disponíveis para encerramento. Primeiro, basta aguardar a conclusão do sandbox e receber o status de execução final:

sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();

Como alternativa, você pode encerrar o Sandboxee a qualquer momento, mas ainda é recomendado chamar AwaitResult(), porque ele pode ser encerrado por outro motivo:

s2.Kill();
sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();