「車輪の再実装」って言葉が好き(実践はできてない)

UNIXドメインソケットの通信相手(プロセス)を調べる

UNIX ドメインソケットを使っているプロセスの番号とファイルディスクリプタの番号を知りたくなったので、やり方をメモ。

以下のようにlsofコマンドを使う。

$ sudo lsof -U +E +c 15 | grep containerd
systemd             1            root   48u  unix 0xffff8b1691980400      0t0 106648 /run/systemd/journal/stdout type=STREAM ->INO=104729 10894,containerd,2u 10894,containerd,1u
systemd-journal   530            root   21u  unix 0xffff8b1691980400      0t0 106648 /run/systemd/journal/stdout type=STREAM ->INO=104729 10894,containerd,2u 10894,containerd,1u
containerd      10894            root    1u  unix 0xffff8b1691983400      0t0 104729 type=STREAM ->INO=106648 530,systemd-journal,21u 1,systemd,48u
containerd      10894            root    2u  unix 0xffff8b1691983400      0t0 104729 type=STREAM ->INO=106648 530,systemd-journal,21u 1,systemd,48u
containerd      10894            root    6u  unix 0xffff8b1695092c00      0t0 105834 /run/containerd/containerd.sock type=STREAM
containerd      10894            root    7u  unix 0xffff8b1693019400      0t0 106727 /run/containerd/containerd.sock type=STREAM ->INO=106726 11069,dockerd,7u
containerd      10894            root    8u  unix 0xffff8b1693019c00      0t0 106730 /run/containerd/containerd.sock type=STREAM ->INO=106729 11069,dockerd,8u
dockerd         11069            root    7u  unix 0xffff8b169301b400      0t0 106726 type=STREAM ->INO=106727 10894,containerd,7u
dockerd         11069            root    8u  unix 0xffff8b1693018c00      0t0 106729 type=STREAM ->INO=106730 10894,containerd,8u

-Uオプションで、プロトコルUNIXドメインソケットに限定、
+Eオプションで通信のエンドポイント情報を表示、
+c 15は、コマンド名が省略されるのを防ぐために使用。

調べ不足かも知れないが、lsofのオプションにソケットのパス名は指定できなそうなので、grepで探している。