簡體   English   中英

stat()對於文件系統是原子的

[英]Is stat() atomic with respect to the file system

我有一組可執行文件,這些文件每24/7每隔幾分鍾定期更新一次文件集合。 我正在考慮編寫一個監視程序,該程序將連續檢查所有這些文件的上次寫入時間(使用stat()函數),這樣,如果最近沒有對它們進行足夠的更新,它可能會發出警報。 不過,我擔心的是,也許調用stat()的行為可能會導致試圖寫入該文件的程序失敗。 我需要擔心嗎?...如果可以的話,還有其他方法可以實現我的目標嗎?

是的,可以將stat調用視為原子調用,因為它保證返回的所有信息都是一致的。 如果您同時調用stat ,則其他進程正在寫入文件,則該另一進程的寫操作應該不會反映在st_mtime而不會反映在st_size

而且無論如何,在其他進程正在寫入文件的同一時刻調用stat 絕對不可能導致其他進程失敗。 (這將是操作系統中的一個嚴重且非常不可接受的錯誤-操作系統的主要工作之一是確保不相關的進程不會以這種方式意外地相互交互。這種缺乏干擾的特性是不過,通常我們所說的“原子”通常不是。)

話雖如此,監視進程的通常方法是通過其進程ID。 並且可能有很多預寫的軟件包可以幫助您管理一個或多個應該連續運行的流程,從而為您提供干凈的啟動/停止和監視功能。 (以s6為例。我對此包一無所知,不推薦使用;這只是我在網絡搜索中遇到的第一個包。)

如果您在進程之間設置了任何種類的IPC機制,則另一種可能性是設置每個發布的定期心跳 ,以便某個地方的看門狗計時器可以檢測到進程即將終止。

但是,如果您想通過它們編寫的文件的及時性來監視您的進程,那聽起來也很完美。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM