6. 退出沙盒

根据您运行沙盒的方式(请参阅此步骤),您必须调整终止沙盒的方式,从而也调整终止 Sandboxee 的方式。

退出同步运行的沙盒

如果沙盒以同步方式运行,则 Run 仅在 Sandboxee 完成时返回。因此,无需执行额外的终止步骤。以下代码段展示了此情形:

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

异步退出正在运行的沙盒

如果沙盒以异步方式运行,则有两种终止方式。首先,您可以等待 Sandboxee 完成,并接收最终的执行状态:

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

或者,您也可以随时终止 Sandboxee,但仍建议调用 AwaitResult(),因为 Sandboxee 可能会因其他原因而终止:

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