【发布时间】:2012-03-13 20:09:03
【问题描述】:
我有一个运行一些昂贵设备的 Windows 应用程序;这个应用程序以各种创造性的方式消亡。通常,当它发生时,该过程会完全终止。我编写了一个小监控程序,它在当前正在运行的事物列表中查找进程的名称,这对那些失败很有用。但有时它会变得完全没有响应,需要通过任务管理器终止,但在某种无益的意义上仍然“运行”。
我对 Windows API 完全不熟悉,所以这可能有点牵强,但是我可以做些什么来以编程方式检查其他进程的“活跃度”吗?或者我可以用来猜测? (等待它停止处理来自操作系统的事件,或等待所有磁盘访问/内存分配停止等)
最好是我可以通过 Python win32 模块做的事情,但我会扩展到任何可以成功检测到这个东西何时锁定的事情。而且,我意识到“活跃度”是模糊的,但我不想排除任何可能性,尤其是当我对这件事是如何失败的没有任何洞察力的时候。
【问题讨论】:
-
昂贵的设备??那究竟是什么?我也认为你应该从内部而不是从外部解决你的问题。
-
如果这是一个选项,那就太好了,我会追求它。那不是一个选择。这是一个完全合理的问题,因为世界上到处都是运行重要机器的闭源软件。我真的不在乎详细介绍确切的软件或机器,因为对我来说没有好处。制造商可能会因投诉而脾气暴躁的微小风险不值得满足您的好奇心。我只提到设备是为了激发我对答案的渴望,并避免“只使用不同的东西”的建议。
-
我认为解决方案因具体挂起的内容而异。如果它是一个窗口,那么 SecurityMatt 的建议听起来不错。否则,我认为您只需“检查”该应用程序即可找到该应用程序发出的某种通知,该通知说“我还活着”或“我要挂了”。除非线程已被显式挂起,否则我所知道的任何类型的标志都不会告诉您线程已挂起(例如在无限循环中)。
-
@JayKominek 等一下,你说“有时它会变得完全没有响应”,是 windows 应用程序还是你的监控程序?如果是应用程序,此时您真正想做什么?找出它是否仍然存在或重新启动进程?
-
应用程序无响应。监控程序认为应用程序仍在运行。我真正想要的是找出程序什么时候不再做任何事情,这样我就可以通知一个活生生的人。 (自动重启应用效果不是很好。)
标签: python windows winapi pywin32