Find out which process is using Inotify

Find out which process is using Inotify

Here is how to list processes which are using Inotify to watch FileSystem changes under Linux and also list how many Inotify nodes each one is using.

This can come in handy when you want to make sure some process (such as jekyll with Auto-regeneration enabled) is actually using Inotify or to find out if your are about to run out of Inotify nodes because a process is creating too much of them.

List processes

For each Inotify node used by a process, a file descriptor is created in the file descriptor directory of the process in /proc.

Use the following command to list the processes with at least one Inotify node.

ps $(find /proc/*/fd/* -type l -lname 'anon_inode:inotify' 2>/dev/null | sed 's+/proc/\([^/]*\)/fd/.*+\1+')

The result is something like the following:

 2244 ?        Sl     0:03 /usr/lib/gnome-settings-daemon/gnome-settings-daemon
 2294 ?        Sl     3:22 compiz
 2300 ?        Sl     0:01 nautilus -n
 2325 ?        S      0:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
 2820 ?        Rl     0:16 gnome-terminal
 3081 ?        Sl     0:00 gnome-screensaver
 3543 ?        Sl     0:00 update-notifier
13246 ?        Sl     0:06 /opt/sublimetext/sublime/sublime_text
14053 pts/3    Sl+    0:18 ruby2.1 /usr/local/bin/jekyll serve -w --draft

You can get more details about the process using the regular ps options such as -f;

ps -f $(find /proc/*/fd/* -type l -lname 'anon_inode:inotify' 2>/dev/null | sed 's+/proc/\([^/]*\)/fd/.*+\1+')


Count nodes per process

find /proc/*/fd/* -type l -lname 'anon_inode:inotify' -print

Result will look like the following:


The first number on each line is the process id, the second number is the number of nodes for this process.