web-dev-qa-db-ja.com

不正なアプリケーションによって開いたままになっているポートを閉じる(またはバインド解除する)方法は?

Fedora 13 64ビットを使用しています。私のEclipseプログラムはポート9050でサーバーを起動しますが、プログラムをシャットダウンすると、Eclipseはサーバーを正しくシャットダウンできません。 Eclipseを再起動しても効果はありません。

コマンドラインからポートを強制的に閉じるまたはバインド解除するにはどうすればよいですか?

再起動するか、ログオフして再度ログオンするとポートがクリアされることはわかっていますが、この処理は非常に遅くなります。コマンドラインでポートを強制的に閉じることを探しています。

19
Mark

listeningポートを強制的に閉じる唯一の方法は、それをリッスンしているプロセスを強制終了することです。 lsofnetstatfuserをルートとして使用して、プロセスIDを確認します。プロセスが終了すると(それ自体、または強制終了されると)、カーネルは開いていたすべてのソケットを自動的にクリーンアップします。 (ただし、プログラムが同じポートで数分間リッスンを拒否される場合があります。この場合、実行できるのは待機することだけです。)

10
user1686
lsof -n -i

あなたが探しているプロセスを見つけて、それを殺してください。

lsof manual から:

-nこのオプションは、ネットワークファイルのホスト名へのネットワーク番号の変換を禁止します。変換を禁止すると、lsofの実行が速くなる場合があります。ホスト名の検索が正しく機能していない場合にも役立ちます。

-i[i]このオプションは、インターネットアドレスがアドレスと一致するファイルのリストを選択しますiで指定アドレスが指定されていない場合、このオプションはすべてのインターネットおよびx.25(HP-UX)ネットワークファイルのリストを選択します。

同じ答え この質問 だと思います。

19
aVeRTRAC

_-k_スイッチを使用してfuserコマンドを使用できます。

たとえば、ポート111を閉じるには、次の操作を実行できます。_fuser -k 111/tcp_(これは、fuserが暗黙的に行うように、プロセスのIDを見つけて強制終了する手間も軽減します)

一部のプロセスは、閉じると自動的に再起動することに注意してください。そのためには、適切な回避策を考え出すために、各プロセスの構成ファイルを確認する必要があります。

9
tony9099