可以使用ruby脚本自动强制在OSX中退出冻结的应用程序吗?

时间:2014-12-20 18:13:12

标签: ruby command-line terminal osx-mavericks

我使用openframeworks构建了一个应用程序,该应用程序在自助服务终端上全天候运行。每隔一段时间(每隔几周)它就会随机变得无法响应,我仍然无法触及它的底部,因为它非常随机且不常见,很难调试。

我编写了一个ruby脚本,用于查找正在运行的应用程序,如果它不存在,它将启动它。这适用于应用程序名称未显示在活动监视器中的所有情况。这意味着如果应用程序崩溃并完全强制退出自身或其他东西。它运作得很好。

然而,如果应用程序只是冻结并且没有响应(活动监视器中的红色突出显示),除非我强制手动退出,否则应用程序不会完全退出。是否有某种脚本我可以编写以查找所有"无响应的应用程序/进程"每隔几秒钟就会自动退出?这样,我的应用启动器脚本将能够检测到应用程序没有运行并再次启动它。

1 个答案:

答案 0 :(得分:1)

我建议你看看Monit,因为它很扎实,经过充分测试,记录良好且易于学习。

如果您仍想编写自己的监控脚本,Monit就是一个很好的例子。

检测无响应的应用程序最可靠的方法是拥有一个“生命体征”,这是一个应用程序发出的信号的通用术语,以证明它是健康的。有些人称之为“脉搏”或“心跳”或“脑波”。您的外部脚本会监视生命体征。如果您的外部脚本看到生命体征平坦,那么脚本会采取措施来修复应用程序或重新启动它。

另一种方法是使用“ping”,这是外部脚本向应用程序或系统发送信号,然后收听回复的通用术语。您可以使用诸如Unix ps命令之类的工具进行处理,或使用AppleScript Activity Monitor。据我所知,这些可以很好地捕获常见案例,但却无法捕获吸收资源的应用程序,例如陷入无限循环。