ポートを使用して「目に見えない」プロセスを強制終了する方法

ポートを使用して「目に見えない」プロセスを強制終了する方法

Linux マシンで、Glassfish サーバーを起動しようとしています。

./startserv

次のメッセージが返されます。

There is a process already running using the admin port 4848 -- it is probably another instance of a Glassfish server

次のコマンドを使用して、これがどのプロセスであるかを特定しようとしました。

lsof -t -i tcp:4848

Glassfish が実行されている別のマシンでは、このコマンドは Glassfish が使用するプロセス ID を返します。ただし、問題が発生しているマシンでは何も返されません。

lsof -t -i tcp:4848役に立たない場合、ポート 4848 を使用してプロセスを識別して終了する最善の方法は何ですか?

ありがとう

答え1

ここではおそらく 2 つのことが起こっています。1 つは、ポートで何かがリッスンしていて、lsof などがそれを見逃しているか、起動スクリプト/エラー メッセージが混乱していることです。

ネットワーク名前空間はポートを隠すかもしれませんが、procファイルシステムを直接クエリしたい場合は、

grep 12f0 /proc/net/tcp
grep 12f0 /proc/net/tcp6

12f0 は 16 進数で 4848 であり、これらのファイルはカーネルが TCPv4 および TCPv6 ソケットに関する情報を保存する場所です。

一致する行が見つかった場合、実際にポートをリッスンしている何かが存在し、ツールが疑わしいことになります。ヒットしない場合は、名前空間が機能しているか、起動スクリプトが機能していないことを意味します。

netcatでソケットが実際に使用されているかどうかを確認することもできます。

nc -l 4848

何も表示されなければ問題ありません。ソケットが使用中であるというエラーが表示される場合は、実際に使用中であるため、ツールと名前空間が正常であることを確認する必要があります。

関連情報