linux – 列出当前的inotify监视(路径名,PID)

我如何获得以下列表:

> inotify目前正在监视的路径名,和
>过程观看的PID

我问,因为我发现syncthing的inotify手表阻止了我的磁盘卸载.

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

我猜对了同步…如果由于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

解决方法:

也许手表fd的fdinfo可能很有用:

$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 / sda1是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

这应足以找出阻止卸载的内容,即使未列出正在监视的特定目录或文件.

上一篇:Linux下执行程序出现 Text file busy 时的解决办法


下一篇:linux命令汇总