4. Exécuter le bac à sable

Dans les sections précédentes, vous avez préparé l'environnement sandboxé, la stratégie, l'exécuteur et Sandboxee. L'étape suivante consiste à créer l'objet Sandbox2 et à l'exécuter.

Exécuter de manière synchrone

Le bac à sable peut s'exécuter de manière synchrone, bloquant ainsi l'exécution jusqu'à ce qu'un résultat soit disponible. L'extrait de code ci-dessous montre l'instanciation de l'objet Sandbox2 et son exécution synchrone. Pour obtenir un exemple plus détaillé, consultez 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();

Exécuter de manière asynchrone

Vous pouvez également exécuter le bac à sable de manière asynchrone, ce qui signifie qu'il ne se bloque pas tant qu'il n'y a pas de résultat. Cela peut être utile, par exemple, lorsque vous communiquez avec Sandboxee. L'extrait de code ci-dessous illustre ce cas d'utilisation. Pour obtenir des exemples plus détaillés, consultez crc4 et 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();