我正在使用inotify事件(恰好发生在Python中,调用libc)来监视文件中的更改。
对于a期间的某些文件git clone
,我看到了一些奇怪的事情:我看到一个IN_CREATE
事件,并且通过ls
它看到该文件包含内容,但是,我从未看到IN_MODIFY
或IN_CLOSE_WRITE
。因为我要IN_CLOSE_WRITE
对文件做出响应,这导致了我的问题:具体来说,是启动文件内容的上载。
行为异常的文件位于.git/objects/pack
目录中,并以.pack
或结尾.idx
。git创建的其他文件具有更规则的IN_CREATE
-> IN_MODIFY
-> IN_CLOSE_WRITE
链(我不在监视IN_OPEN
事件)。
这是在MacOS上的docker内部,但是我已经看到在远程系统上的Linux上的docker上有相同的证据,因此我怀疑MacOS方面是不相关的。如果正在观看并且git clone
在同一个 Docker容器中,我会看到这个。
我的问题:
为什么这些文件上缺少这些事件?
该怎么办?具体来说,我该如何回应对这些文件的写入完成?注意:理想情况下,我想在“完成”书写时做出响应,以避免不必要地/(不正确地)上传“未完成”的书写。
编辑:阅读https://developer.ibm.com/tutorials/l-inotify/看来我所看到的与
- 一个单独的临时文件,其名称如
tmp_pack_hBV4Alz
,正在创建,修改和关闭; - 将以最终名称创建到该文件的硬链接
.pack
; - 原始
tmp_pack_hBV4Alz
名称被删除。
我认为我的问题是尝试使用inotify作为上载文件的触发器,然后简化为注意到该.pack
文件是与另一个文件的硬链接,并且在这种情况下上载?