一种可以守护多个程序的守护进程的实现方案
-
账服需要守护程序,原来的守护程序使用的一对一的方式,技术部希望我们能提供一对多的守护程序,这样他们可以不用区分哪个程序守护哪个账服,多开时比较方便。
-
原来的守护进程的做法是先启动守护进程,然后守护进程通过CreateProcess启动账服程序,然后调用WaitForSingleObject挂起等待账服进程,如果返回,说明账服崩溃了或者被关闭了,那么就重新启动账服,不断循环。 如果一个守护程序要同时守护多个程序,那么原来的方案就适用了。
-
于是我们采用了另外一个方案:
- 在文件中配置需要守护的所有程序
2- 每隔一段时间(可配置在文件中,如5秒),遍历一次所有进程(可以使用ToolHelp32也可以用enumprocesses),获取进程的可执行文件的完整路径文件名,和配置内的程序进行匹配
3- 如果无法找到,则重新启动这些程序
-
方案优缺点分析:
-
优点:方便灵活,一个守护程序可同时守护多个不同的程序
-
缺点:
-
配置比较麻烦,而且必须配置程序的完整路径。
-
多余的CPU消耗,因为每隔一段时间要检测一次,而不像原来直接挂起等待,会有一部分额外CPU开销。
-
-