【问题标题】:Defining the 'Not responding' behavior of a program定义程序的“无响应”行为
【发布时间】:2012-12-04 07:57:18
【问题描述】:

我需要编写一个应用程序来持续监控系统/应用程序的行为并标记出根本“没有响应”的进程。

我的意思是在 Windows 上是这样的:

或在 Android 上这样:

谁能帮我定义这种“挂起”或“无响应”的行为,以便我可以编写一个应用程序来监控这些参数。

我只能想到一个参数:

持续监控每个应用程序的处理器使用情况,如果它们在某些 'y' 单位时间内消耗超过 'x'% 的 CPU,则将它们标记为无响应。

平台:Linux/Android/Windows

【问题讨论】:

  • 每个操作系统都有自己的规则。在 Windows 的情况下,它会检测到应用程序没有抽送其消息队列。
  • “你”能解释一下投反对票的原因吗?

标签: android linux windows


【解决方案1】:

你需要一个类似看门狗的东西。要么应用程序必须定期执行一些预定义的活动,而您只需定期检查它是否执行了此活动。或者你向应用程序发送某种请求,它必须回答。

在某些 'y' 单位时间内消耗超过 'x'% 的 CPU无响应 无关。应用程序可能会消耗大量 CPU,但仍会响应系统或用户事件。同样,应用程序可以完全不消耗 CPU,因为它等待输入,并且在此期间不响应任何其他请求。

【讨论】:

  • 您的方法需要我的监控应用程序和其他应用程序之间有某种理解。但我的限制是我不能拥有来自已知来源的所有应用程序,他们可能完全不知道我的应用程序本身。
  • 那么您将无法区分响应应用程序和不响应应用程序之间的区别。它对你来说只是一个黑盒子,即使它做了一些处理,你也不知道它是否卡在某种循环中。要么它必须响应一些来自外部的事件,要么它必须外部做一些事情。
  • 那么作为操作系统的 Windows/Android 是如何找出哪些应用程序正在响应而哪些没有呢?据我所知,我们在设计应用程序时并没有意识到这一事实,还是我们?
  • 这通常由所有这些应用程序使用的某些操作系统 API/库自动完成,然后这些应用程序将在定期执行的事件循环中处理和响应事件。这是非常特定于操作系统的。
【解决方案2】:

我们在企业中有一些活动进程,有时由于长时间运行或内存问题,它们会关闭而不会引发异常。他们只是死了。

我们在这个应用程序中实现了一个类,它将自己的进程活动记录到文件或数据库表中。

我们使用另一个观察者监视器来获取此记录的数据事件 X 分钟,因此如果超过 X 分钟并且没有出现记录的数据,则该过程无法正常工作。

我们使用 psexec 远程杀死进程并重新启动它。

【讨论】:

  • 感谢您的想法。但是您的方法仅适用于“受信任的”应用程序。我的要求是我应该能够监视和处理“不受信任”的应用程序,就像那些可能没有实现您提供的记录器类的应用程序一样。
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多