gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:48:40 27 4
gpt4 key购买 nike

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

在shutdown过程中,进程是按照某种顺序被kill掉的。我们有监控/恢复程序,它们应该根据服务器是关闭还是进程刚刚崩溃而表现不同。 (具体来说,如果服务器实际上正在关闭,我们不想做任何事情)

我如何在恢复进程(如果它仍然存在)中检测到进程因关闭而被杀死?

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

最佳答案

代理

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

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

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

代理(变体)

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

查找服务

使用查找服务(例如 Zoo Keeper)来跟踪哪些进程发送了心跳保持事件状态。如果代理处于事件状态,则机器仍在运行,如果代理不处于事件状态,则机器未在运行。

EC2 接口(interface)

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

关于linux - 我的进程如何检测计算机是否正在关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com