我需要在 Ubuntu LTS 上为第 3 方网络文件传输 java 程序编写一个看门狗,该程序每 40 - 50 分钟的持续网络传输 @4MB/s 就会终止。
我无法修改该 java 程序,但它是通过 upstart 生成的。
我当前的看门狗正忙于等待:
while monitoring_enabled:
begin_time = now()
# query ps and /proc to see if it's there
end_time = now()
diff_time = end_time - begin_time
if not diff_time > sleep_time:
sleep(sleep_time - diff_time)
由于“忙等待很糟糕”,并且这会占用大约 10% 的 CPU,我想知道是否有更好的方法来解决这个问题:
使用通知/事件处理而不是轮询。 请注意,我并不是暗示进程终止时会触发任何通知/事件,而是询问操作系统是否可以确定 java 程序已死亡
修改生成 java 程序的 upstart 脚本,以便在进程出现故障时重新启动它?
更好的解决方案? 也许像 Python API library and shell utilities to monitor file system events ,但对于 Linux 进程
最佳答案
Supervisor - Python、生成和控制进程、事件通知、xml-rpc api、良好的文档、良好的评论
关于process - 用Python编写一个看门狗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072928/