web-dev-qa-db-ja.com

現在の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
6
Tom Hale

時計の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/sda18: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

監視されている特定のディレクトリまたはファイルがリストされていなくても、アンマウントをブロックしているものを見つけるにはこれで十分です。

4
muru

(WIP回答)

キックスタートの muruの回答 に感謝します。

/proc/[pid]/fdinfo/[fd#]の情報を使用する:

おそらく lsof:特定のタイプのファイルのみをリスト with a_inode

すべてのgrepingを含むシェルスクリプトのように遅くなります。たぶん / proc情報へのシステムコールインターフェイス

1
Tom Hale