GNU/Linux >> Linux の 問題 >  >> Linux

ポート 80 で実行中のプロセスを強制終了する

ポートを使用している実行中のプロセスを見つけるには、いくつかの方法があります。

fuser を使用すると、リスニング ポートに関連付けられた複数のインスタンスの PID が得られます。

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

見つけた後、プロセスを停止または強制終了できます。

lsof を使用して PID と詳細を見つけることもできます

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

リッスンするソケットに限定するには ポート 80 で (ポート 80 に接続するクライアントとは対照的に):

sudo lsof -i tcp:80 -s tcp:listen

それらを自動的に殺すには:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

実行するコマンドを示すワンライナーを次に示します:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

echo を置き換えます sudoまで プロセスが実際に強制終了されるようにします。


jsh の whatisonport では、開いているポートを一覧表示するための 3 つのオプションが提供されています。 :

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

私は netstat が好きです 高速で簡潔で、他のユーザーが開いたポートを一覧表示できるためです。 (ただし、そのようなプロセスの名前と PID を一覧表示するには、依然としてスーパーユーザー/ユーザー権限が必要です。)

アウトプット

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

grep の使用 2 つのケースでは、ローカル側のポートのみを照合し、リモート ポート 80 への開いている接続をスキップします (代わりに -l を使用することもできます)。 netstat で 、または lsof を使用 -sTCP:LISTEN を使用するには 、しかし、発信もキャッチするので、上記のgrepが好きです からの接続 指定されたポート。これは時折重要になる場合があります。)

lsof-P を使用します :80 を表示するには :http の代わりに grep を可能にします。 -S 2 オプションは lsof を強制します タイムリーに完了します。

プロセスの強制終了

netstat を使用すると仮定します 、次のように PID を取得できます:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

これらの PID を kill に渡すこともできます :

... | xargs -d '\n' kill -KILL

ただし、正規表現を使用すると誤検知が発生する可能性が高いため、netstat の初期出力を確認することをお勧めします。 そして、実行するかどうかを手動で決定します:

$ kill -KILL 1914

こちらもご覧ください

listopenports という別のスクリプトがあります


Linux
  1. 実行中のプロセスの環境を変更しますか?

  2. プロセスの子孫?

  3. Linuxで実行中のプロセスを強制終了する方法

  1. Linuxの特定のポートで実行されているプロセスを強制終了する方法は?

  2. Linux での kill コマンドの例

  3. Linux の特定のポートで実行されているプロセスを強制終了するには?

  1. プロセスを聞く方法はありますか?

  2. 特定のポートを使用してプロセスの PID を見つけていますか?

  3. Netcat - IPv6 アドレスを使用して TCP ポートをリッスンする方法は?