列出当前 inotify 监视(路径名、PID)

列出当前 inotify 监视(路径名、PID)

我如何获得以下内容的列表:

  • 当前正在由inotify、 和监视的路径名
  • 监视进程的PID

我问是因为我发现syncthinginotify手表阻止我的磁盘被卸载。

如下所示,列表中没有出现任何lsof内容fuser

我猜得很好syncthing...如果磁盘由于以下原因而无法卸载,我如何消除将来的猜测inotify


# umount /media/backup
umount: /media/backup: target is busy.
# lsof +f -- /media/backup/
# echo $?
1
# fuser -vmM /media/backup/
                     USER        PID ACCESS COMMAND
/media/backup:       root     kernel mount /media/backup
# systemctl stop syncthing@ravi
# umount /media/backup
# echo $?
0

答案1

也许fdinfo手表的 fd 会有用:

$ readlink /proc/$(pgrep inotify)/fd/3
anon_inode:inotify
$ cat /proc/$(pgrep inotify)/fdinfo/3
pos:    0
flags:  00
mnt_id: 11
inotify wd:1 ino:357a sdev:700000 mask:fff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7a35000000000000

sdev似乎是主要:次要设备编号组合,如 的输出所示lsblk,例如:

$ lsblk | grep 7
loop0    7:0    0  80.5M  1 loop /snap/core/2462

(我确实在监视/snap/core/2462。)

对于我的/dev/sda1which is 8:1,输出如下所示:

pos:    0
flags:  00
mnt_id: 11
inotify wd:1 ino:aae1b sdev:800001 mask:fff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:1bae0a0038e16969

即使未列出正在监视的特定目录或文件,这也足以找出阻止卸载的原因。

答案2

(未完成的答复)

谢谢穆鲁的回答为了启动。

使用以下信息/proc/[pid]/fdinfo/[fd#]

可能 lsof:仅列出特定类型的文件a_inode

作为 shell 脚本来说,速度太慢了grep。也许/proc信息的系统调用接口

相关内容