まくろぐ
更新: / 作成:

迷ったらとりあえずコレ

次のように実行すると、TCP でポートを開いて LISTEN 状態になっているプロセスのコマンド名や PID の一覧を表示できます。

開いている TCP ポートの一覧を表示
$ lsof -i tcp -s tcp:listen -P
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ControlCe   604 maku   24u  IPv4 0xbf4647db74c55935      0t0  TCP *:7000 (LISTEN)
ControlCe   604 maku   25u  IPv6 0x27a96e6374c5592c      0t0  TCP *:7000 (LISTEN)
ControlCe   604 maku   26u  IPv4 0xbf46527374c55935      0t0  TCP *:5000 (LISTEN)
ControlCe   604 maku   27u  IPv6 0x27a9756374c5592c      0t0  TCP *:5000 (LISTEN)
deno       8572 maku   14u  IPv4 0xbc6a127374c55935      0t0  TCP *:8000 (LISTEN)
hugo      10971 maku    6u  IPv4 0xbcba127374c55935      0t0  TCP localhost:50001 (LISTEN)
hugo      10975 maku    6u  IPv4 0xbd35a81374c55935      0t0  TCP localhost:50002 (LISTEN)
ruby      52070 maku    9u  IPv4 0xbf461d7b74c55935      0t0  TCP localhost:4000 (LISTEN)
ruby      52070 maku   12u  IPv4 0xbd38681374c55935      0t0  TCP localhost:35729 (LISTEN)
node      65924 maku   38u  IPv6 0x27a9356374c5592c      0t0  TCP localhost:5173 (LISTEN)
Dropbox   68519 maku  114u  IPv4 0xbc67e81374c55935      0t0  TCP *:17500 (LISTEN)
Dropbox   68519 maku  115u  IPv6 0x27a8836374c5592c      0t0  TCP *:17500 (LISTEN)

サーバー系の開発をしていると、開いているポートがどんどん増えていくので、次のような ports エイリアスを定義しておくと便利です。

~/.zshrc や ~/.bashrc で
alias ports="lsof -i tcp -s tcp:listen -P"

lsof -i の使い方

lsof (list open files) コマンドは、Linux や macOS で、現在開いているファイルやソケットの一覧を表示するコマンドです。 TCP/UDP ソケット(つまりネットワーク)に関する情報を表示するには、-i オプションを指定します。

$ lsof -i
$ lsof -i tcp -s tcp:listen       # TCP で LISTEN 状態になっているものに絞る
$ lsof -i tcp:3000 -s tcp:listen  # 指定したポート番号を開いているプロセスを調べる

デフォルトでは、ポート番号がサービス名(IANA 管理)に変換して表示されるので、この挙動を抑制して、数値のポート番号で表示したいときは、-P オプションを指定します。

$ lsof -i tcp:8000
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Python  71362 maku    5u  IPv6 0x2825a06374c5592c      0t0  TCP *:irdmi (LISTEN)

$ lsof -i tcp:8000 -P
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Python  71362 maku    5u  IPv6 0x2825a06374c5592c      0t0  TCP *:8000 (LISTEN)

上記のように実行して PID を調べれば、kill コマンドで対象プロセスを終了することができます。

$ kill 71362

関連記事

まくろぐ
サイトマップまくへのメッセージ