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

我正在EC2现场实例上运行一些应用程序.这些情况可能会被亚马逊杀死,恕不另行通知.

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

如何在恢复过程中检测到(如果它仍然存在)由于关闭而导致进程被终止?

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

解决方法

代理人

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

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

它通过打开TCP连接(RMI / RPC / HTTP)到代理查询其子进程来实现.
如果代理响应 – 计算机仍在运行,则可以询问其子沙箱进程.
如果代理没有响应 – 机器被怀疑被终止.

代理人(变异)

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

查找服务

使用查找服务(例如Zoo Keeper)来跟踪发送心跳保持活动的进程.如果代理处于活动状态,则计算机仍在运行,如果代理程序未处于活动状态,则表示该计算机未运行.

ec2 api

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

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...