Inotify

inotifywait 手冊頁上的“未明確被監聽”是什麼意思?

  • November 6, 2017

人 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 onfoo建立後,有一個 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 退出,表示“發生了一個未被監聽的事件”(並且沒有像大多數非監聽事件那樣被忽略)。

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