[英]Why does the Python filelock library delete lockfiles on Windows but not UNIX?
我正在使用filelock
的文件鎖模塊。
在 Windows 上,當一個鎖被釋放時,支持它的文件被刪除。
在 UNIX 上,即使釋放了鎖,文件系統上仍然存在鎖文件。
操作系統之間的差異是否有原因? 如果沒有理由讓它有所不同,那么這些行為中哪一個更正確?
py-filelock
用於刪除filelock
上的鎖文件的文件鎖庫; 自benediktschmitt/py-filelock#31
,此行為已被刪除,它指的是flock():在沒有競爭條件的情況下刪除鎖定的文件? - 它討論了本答案后面部分中描述的相同競爭條件。
操作系統語義不同,因此在每種情況下都適用不同的方法。 在 UNIX 中,即使有打開的句柄,您也可以刪除文件,因此不能刪除鎖定文件,否則兩個程序都可能認為它們持有相同的鎖,而實際上它們持有完全不同的 inode 上的鎖,這些 inode 位於不同的點及時,以相同的文件名引用。
相比之下,Windows 上的默認文件系統語義使得在任何程序打開文件時都無法刪除文件(即使 NTFS 強大到足以支持它,但為了向后兼容圍繞 FAT 限制設計的程序,它被人為地阻止了),所以在 Windows 上,刪除鎖文件是安全的:如果刪除成功,則證明沒有人持有鎖(或者甚至正在打開文件以稍后獲取鎖)。
要提供一個示例,說明允許在 UNIX 上取消鏈接打開的文件如何使刪除鎖定文件變得危險,請考慮以下常見競爭條件的圖示:
unlink()
系統調用來刪除鎖定文件。 (為了安全起見 UNIX,請忽略此步驟)。 這不會刪除文件本身(“inode”),直到沒有程序打開它,但它會立即從先前包含該文件的目錄中刪除指向該文件的鏈接。因此,上面說明了在 UNIX 上,刪除鎖文件如何允許出現競爭條件,其中一個鎖似乎同時被兩個程序持有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.