如何避免关键程序被意外关闭?
2017-06-23 14:26
218 查看
1,问题的提出
最近公司开发了一个数据上传程序,要求24小时运行不能中断。但实际部署后,发现有时被windows认定为程序异常,从而被关闭。由于机器绑定了固定IP,程序必须在此固定Ip的服务器上运行。因此不能更换为其它服务器。
在服务器上安装杀毒软件后,异常退出情况有所好转,但仍不能100%保证。
重装系统也是非常繁琐,且需中断程序执行,即使重装问题也不一定能得到解决。
2,解决思路
一个简单的解决方案是,不去保证程序不会退出,但保证程序退出后能立即重新运行。显然,后一项保证容易实现得多。因此,问题变成了实现程序运行监控的问题。首先,运行一个监控程序,与上传程序同时运行,监控程序每隔5分钟检查上传程序是否退出,如果退出就重新启动运行它。
显然,这个方案存在缺陷,如果监控程序被意外关闭了呢?比如人工意外关闭,或被操作系统关闭。
因此,考虑再加一个监控程序的监控程序。我们把前一个监控程序称为“监控程序1”,这后一个监控程序称为“监控程序2”。
显然,监控程序1需要同时监控1个程序:上传程序和监控程序2,而监控程序2只需要监控“监控程序1”即可。
监控程序1和监控程序2相互监控,相互启动。人为关闭监控程序不可能了,系统也不太可能同时关闭两个程序。因此保证了监控程序1的运行,从而也就保证了上传程序的持续运行。
那么如何退出呢?比如现在确实需要停止上传程序的运行,以便进行程序的更新。
为此,要在监控程序1的界面加上启动监控和停止监控2个按钮。在停止监控按钮按下后,监控程序1不再监控“上传程序”和“监控程序2”,此时可以关闭“上传程序”和“监控程序2”,然后再关闭“监控程序1”。
3,程序实现
程序采用delphi编写,此处不再详述。需要说明的一点,因为监控操作频繁发生,为防止界面失去响应,应在子线程中实现。相关文章推荐
- linux下c++程序扔在后台运行,如何避免断开ssh会话,程序也关闭
- 〖原创〗如何实现程序自动关闭powerbuilder弹出的消息窗口?
- 如何避免不同的用户调用接口时出现多个服务程序实例
- 如何避免Java程序的数据脏读问题?
- VC中如何关闭窗口退出程序?
- 如何让VS2005的控制台程序运行完后不立即关闭
- TPC基准程序及tpmc值-兼谈在使用性能度量时如何避免误区[转载]
- 如何在自己的系统中打开并关闭外部程序
- 如何关闭2003的关闭事件跟踪程序
- 如何捕捉控制台程序的关闭事件
- 如何在程序打开时窗口恢复上次关闭的大小和位置?
- 如何在程序中打开/关闭CDROM?
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- .Net程序中如何彻底关闭Excel - 关闭进程外COM方法
- 如何暴力关闭一个服务程序?
- 如何捕捉控制台程序的关闭事件。
- 如何在程序中关闭别的进程中的DLL文件,让其释放掉
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- tomcat 程序如何关闭
- 如何在自己的系统中打开并关闭外部程序