web-dev-qa-db-ja.com

プロセスなしでtcpポートを閉じます

プロセスが割り当てられていないリッスンモードのTCPポート)の状況になりました。

サーバーを再起動せずにこのポートを閉じる方法はありますか?

ポートステータスの確認:

me> netstat -tan | grep 8888
tcp        0      0 :::8888                :::*                    LISTEN

責任のあるプロセスを探しています:

me> lsof -i -P | grep 8888

上記のコマンドは何も返しません

2
jarekrozanski

netstat -ltpn | grep 8888をお試しください

2
poige

This netstatがプロセス名のダッシュである場合、ページではSudo lsof -i tcp:8888を実行することをお勧めします。

私の場合、それは ゾンビ プロセスによって所有されることになりました、奇妙な、私は知っています。

$ Sudo lsof -i tcp:8888
COMMAND       PID USER FD   TYPE  DEVICE SIZE/OFF NODE NAME
my-proc-name 38116 root   16u  IPv6 326070554      0t0  TCP *:8888 (LISTEN)

次に、38116(この場合)の「ps」出力を調べて、無効なプロセスを確認できます。

ps -ef grep 38116
root     38116     1  0 Apr24 ?        00:06:58 [my-proc-name] <defunct>

(私の推測では、それはまだクリーンアップされていないある種のゾンビプロセスですか?).

別の オプション

Sudo ss -apn | grep 8888
0
rogerdpack

あなたは不可能なシナリオを説明しています。

以前のポスターに欠けているのは、自分が所有していないプロセスにポートをマップしようとしているという事実だと思います。したがって、これらのツールには、そのポート-> PIDマッピングを容易にする/procエントリを表示する権限がないため、lsofは何も返しません。 netstatコマンドにも-pフラグがありません。これらのコマンドをrootとして実行すると、状況がはるかに明確になります。

0
loopforever

netstatは/ proc/net/[tcp | udp | tcp6 | udp6]を解析し、次に/ proc/$ pid/-areaをスキャンして一致するプロセスを見つけますが、fuserとlsofは/ proc/$全体を「のみ」移動します。 pid/-areaは、どのプロセスがどのソケットに対して認識されているかを検索します。最終的に、これら2つの異なるアプローチは異なる結果に終わる可能性があります。

ソケットにプロセスが割り当てられていない場合は、次の2つのオプションがあります。

  • Lsof/fuserを使用していて、このソケットを割り当てるプロセスはありませんが、たとえば、カーネルモジュールがそうしています。そのモジュールを見つける必要があります。
  • / proc/$ pid/fd /にアクセスできないユーザーとしてnetstatを実行しています。

たとえば、NFSを介して共有をマウントすると、同様の「リスニング」ポートが発生します。したがって、これらのポートはNFS共有をマウントすることで再表示され、NFS共有をアンマウントすると消えます。

0

を実行します

fuser 8888/tcp

ポートで実行されているpidが一覧表示されます。

0
Mike