目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

fuserを使ってみる。

忘れがちな脳のための覚え書き

fuserはファイルやファイルシステムを使用しているプロセスのPIDを表示するコマンドらしいです。lsofに似たコマンドですね。ファイルだけでなくTCPやUDPソケットを使用しているプロセスのPIDも表示できます。

tcpのポートをみる場合は-nでtcpの名前空間と送信元のポート番号を指定します。PIDが分かるので、psコマンドの引数に指定してあげればプロセスが分かります。

masasuzu@lenny% fuser -n tcp 50575                                                              [~]
50575/tcp:            2968
masasuzu@lenny% ps 2968                                                                         [~]
  PID TTY      STAT   TIME COMMAND
 2968 pts/3    S+     0:00 ssh 192.168.1.31
masasuzu@lenny% 

…。それlsofでできるよ。

masasuzu@lenny% lsof -i:50575                                                              [~]
COMMAND  PID     USER   FD   TYPE DEVICE SIZE NODE NAME
ssh     2968 masasuzu    3u  IPv4  21620       TCP lenny.intra.masasuzu.net:50575->leon.intra.masasuzu.net:ssh (ESTABLISHED)

前回紹介したlsofを使えば、一発でできたりします。

じゃあ、このコマンドは何が嬉しいのかというと、-kオプションを付けてあげると該当プロセスをkillしてくれるところじゃないでしょうか。
ファイルシステムをアンマウントするときとかに使うようです。このコマンド自体あまり使ったこと無いんでもっとほかに使い方があるのでしょうけれど。

今回はtcp 50575ポートを使っているプロセスをkillします。

masasuzu@lenny% fuser -n tcp 50575 -k                                                           [~]
50575/tcp:            2968
masasuzu@lenny% fuser -n tcp 50575                                                              [~]
masasuzu@lenny% ps 50575                                                                        [~]
  PID TTY      STAT   TIME COMMAND

こんな感じです。もしかしたら本来の使い方とは違うかもです。