Executable

創建“可中斷”執行檔的最佳方法

  • October 17, 2016

我的 Unix 執行檔的工作是執行長時間計算,我向它添加了中斷/恢復功能,如下所述。

程序會定期將迄今為止找到的所有相關數據寫入檢查點文件,然後可以將其用作“恢復”操作的起點。

要中斷程序,我使用Ctrl+ C

這種方法的唯一問題是,如果在程序寫入文件時發生中斷,我會留下一個無用的半寫文件。

到目前為止,我能找到的唯一解決方法如下:

  • 製作程序
  • 寫入兩個文件,以便在重新啟動時可以讀取其中一個文件。

有沒有更乾淨、更好的方法來創建“可中斷”的 Unix 執行檔?

這取決於您是只關心程序本身崩潰還是整個系統崩潰。

在第一種情況下,您可以將新數據寫入新文件,然後僅在完成寫入後將其重命名為真實名稱。這樣,文件將包含以前的或新的檢查點數據,但絕不會僅包含部分資訊。儘管在任何情況下部分寫入都應該很少見,但如果我們假設檢查點程式碼本身不太可能失敗,並且如果相關信號被擷取以確保程序在退出之前完整保存新的檢查點。(除了SIGINT,我認為你最好也抓住SIGHUPSIGTERM

如果我們考慮整個系統崩潰的可能性,那麼我不會只信任一個檢查點文件。當系統從文件寫入系統呼叫返回時,數據不太可能實際在磁碟上。相反,作業系統和磁碟本身可能會記憶體數據並在一段時間後實際寫入。因此,留下一個或兩個先前的檢查點將作為一種故障保護措施。

引用自:https://unix.stackexchange.com/questions/316771