inotifywait 手冊頁上的“未明確被監聽”是什麼意思?
人 inotifywait:
delete_self 一個被監視的文件或目錄被刪除。在此事件之後,不再監視文件或目錄。請注意,即使沒有明確偵聽此事件,也可能發生此事件。
unmount 已解除安裝監視文件或目錄所在的文件系統。在此事件之後,不再監視文件或目錄。請注意,即使未明確收聽此事件,也可能發生此事件。
如何理解該手冊頁上“即使未明確收聽此事件也可能發生”的意思?
https://manpages.debian.org/stretch/inotify-tools/inotifywait.1.en.html
這意味著即使您使用了該
-e
選項並且沒有指定它們,您也可以獲得這些事件。例如,如果您使用inotifywait -e modify filename
並且文件被刪除,你會得到一個
delete_self
事件,即使你只要求modify
事件。這意味著您需要檢查輸出中的事件類型,即使您隻請求了特定事件。
當您要求 inotifywait 等待一個事件(即不在
--monitor
模式下),並且您指定一個或多個事件類型(使用--event
選項)時,它通常不會退出,直到該特定事件發生。例如:$ touch foo $ inotifywait -e access foo Setting up watches. Watches established. $ echo >>foo $ cat foo foo ACCESS $ $ echo $? 0 $
(兩列代表不同的終端,插入空行以使事件按時間順序出現。)這裡,watch on
foo
建立後,有一個 MODIFY 事件,但是由於 on 上的事件過濾器inotifywait
不包括 MODIFY,沒發生什麼事。該inotifywait
命令僅在稍後發生 ACCESS 事件時返回。現在假設文件在被監視訪問時被刪除。
$ inotifywait -e access foo Setting up watches. Watches established. $ rm foo $ $ echo $? 1 $
刪除 foo 會觸發 DELETE_SELF 事件。該
inotifywait
命令會看到此事件。它不列印它,因為它被告知只報告 ACCESS 事件。但是inotifywait
退出:它確實計算了事件,即使它不在過濾器中。該命令以狀態 1 退出,表示“發生了一個未被監聽的事件”(並且沒有像大多數非監聽事件那樣被忽略)。