首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的进程如何检测计算机是否正在关闭?

我的进程如何检测计算机是否正在关闭?
EN

Stack Overflow用户
提问于 2012-05-22 07:07:21
回答 4查看 1.4K关注 0票数 6

我正在EC2 spot实例上运行一些应用程序。这样的实例可能会被亚马逊在没有通知的情况下杀死。

在关机过程中,进程会按某种顺序终止。我们有监控/恢复程序,它们应该根据服务器是关闭还是进程刚刚崩溃而采取不同的行为。(具体地说,如果服务器实际上正在关闭,我们不想做任何事情)

如何在恢复过程中检测到进程(如果它仍然活着)是由于关闭而被终止的?

(更多系统细节:我在一个不修改外部状态的沙箱中运行未知/不受信任/etc代码。通常,如果沙箱代码崩溃,这是不可信代码的作者的错误,我们不会重新运行它。但是,如果沙箱代码由于VM关闭或失败而终止,我们需要在另一个实例上重新运行它。我现在遇到的问题是,用户的代码首先被终止,因此监控程序错误地认为崩溃是用户错误。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-02 15:42:23

代理

在生成沙箱子进程的每台计算机上运行一个代理。代理运行“防崩溃”的代码,沙箱代码运行可能崩溃的用户代码。

负责使用新沙箱进程启动新机器的监视系统检查哪些进程已被终止(代理和沙箱进程或仅沙箱子进程)。

它通过打开到代理的TCP连接(RMI/RPC/HTTP)来查询其子进程。如果代理响应-计算机仍在运行,则可以询问其子沙箱进程。如果代理没有响应,则机器可能已终止。

代理(变体)

代理还负责在同一个VM上重新启动子沙箱进程,以防它崩溃。

查找服务

使用查找服务(如Zoo Keeper)跟踪发送心跳保持活动的进程。如果代理是活动的,则计算机仍在运行;如果代理不是活动的,则它没有运行。

ec2接口

轮询EC2 API以确定机器是处于运行状态还是已终止状态。

票数 5
EN

Stack Overflow用户

发布于 2012-05-31 08:30:44

您的恢复过程是如何工作的?

如果您使用waitpid监视进程,则可以确定它何时退出:

  • 是否正常退出,如果正常退出,进程返回什么状态,或者
  • 是否由于信号而退出,以及该信号是什么。

根据进程的关闭方式,我希望看到它要么正常退出,要么通过SIGTERMSIGKILL退出。SIGILLSIGABRTSIGFPESIGBUSSIGSEGVSIGSYS将表示由于编程错误而崩溃。

票数 2
EN

Stack Overflow用户

发布于 2012-05-22 07:25:18

这听起来像是一个非常脆弱的计划。不要试图检测系统的状态:让您的应用程序写出一个有效性令牌(并同步相关文件!)不知何故,在应用程序的“干净”关闭/停止/停止之后,并使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10693769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档