1. 程式人生 > >如何避免關鍵程序被意外關閉?

如何避免關鍵程序被意外關閉?

失去 如果 服務器 nbsp 機器 要求 重新 重裝 發生

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編寫,此處不再詳述。需要說明的一點,因為監控操作頻繁發生,為防止界面失去響應,應在子線程中實現。

如何避免關鍵程序被意外關閉?