1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

lsofコマンドで検知できないプロセスをnetstatコマンドで特定する

Posted at

はじめに

まず、今回は実行環境としてWSL2を使用しています

いつの日か立ち上げたlocalhost:3001を再起動したかったのですが、ターミナル上では起動された経歴がありませんでした
lsofコマンドを使って確認してもlocalhost:3001は見当たりません。
なのにブラウザ上ではしっかりとlocalhost:3001でアプリが立ち上がっています。なぜ?

$ lsof -iTCP -sTCP:LISTEN
COMMAND   PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node     9607 ayaka_koyama   19u  IPv4  92788      0t0  TCP localhost:43817 (LISTEN)
node    18320 ayaka_koyama   19u  IPv4 668125      0t0  TCP localhost:46661 (LISTEN)
node    27574 ayaka_koyama   19u  IPv4 260919      0t0  TCP localhost:42739 (LISTEN)

解決方法

netstatコマンドを用いてポートを使用しているプロセスを特定しました。

netstat -tulnp | grep 3001

出力結果のプロセスID (PCID)を確認します。

$ netstat -tulnp | grep 3001
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::3001                 :::*                    LISTEN      [PID]/next-server (

killコマンドで該当のプロセスID (PCID)を指定し、サーバーを切断します。

sudo kill -9 [PID]

原因

なぜlsofでは検出できずnetstatで検出できたのでしょうか?
両者には下記の違いがあります。

lsof
システム上で開いているファイルと、それに関連するプロセスを一覧表示します。
つまり、現在のユーザーがアクセスできるプロセスのみを表示します。
ゾンビ化したプロセスは認識できません。

netstat
ネットワーク接続の状態を表示します。
特にnetstat -tulnp現在リスニングしているポートの情報を直接取得します。
そのため、lsofでは検知できない低レベルのネットワーク情報も取得できます。

おわりに

まずなぜこのようなゾンビプロセスが発生してしまったのかは謎ですが、解決できて良かったです。Linuxコマンドを知る機会にもなりました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?