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