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


762

./shutdown.shfrom tomcat /binディレクトリを使用してtomcatを閉じようとしました。しかし、サーバーが適切に閉じられていないことがわかりました。そして、私は
私のTomcatがポートで実行されていることを再起動することができませんでした8080

実行中のTomcatプロセスを強制終了したい 8080。まず、強制終了するプロセスを選択するために、特定のポート(8080)で実行されているプロセスのリストを取得します。


回答:


939

これfuser 8080/tcpにより、そのポートにバインドされているプロセスのPIDが出力されます。

そして、これfuser -k 8080/tcpはそのプロセスを殺します。

Linuxでのみ動作します。より一般的なのは、lsof -i4(IPv6の場合は6)の使用です。


2
これにより、接続されている可能性のあるソケットも8080に閉じますか?
FERのy

9
ポートを適切に閉じません。親プロセスが強制終了された後、ポートはTIME_WAIT状態になります。その後、OSは約60秒後にポートを完全に閉じます。つまり、少なくとも60秒間はポートを再利用できません(ソケットに再利用オプションを指定しない限り)。
Mark Lakata、2015

2
ダーウィンでは、の異なるバージョンを使用している必要がありますfuser。ファイルのみを受け取り、はサポートしていません-k
AP

3
'fuser -k -n tcp 8080'もプロセスを
強制終了し

7
@dblissフューザーはpsmiscの一部です。を入手した場合はfuser: command not found、psmiscをインストールしてください。CentOSの/ RHEL 7、実行のためにsudo yum install psmisc
トム・

700

ポート8080をリッスンしているプロセスを一覧表示するには:

lsof -i:8080

ポート8080をリッスンしているプロセスを終了するには:

kill $(lsof -t -i:8080)

より激しく:

kill -9 $(lsof -t -i:8080)

-9に相当するSIGKILL - terminate immediately/hard kill信号:参照キル信号のリストをし、killコマンドで-9オプションの目的は何ですか?何の信号がに指定されていない場合。kill、TERM信号は別名、-15またはsoft kill時には殺すために十分ではありません送信され、プロセス。)。


9
kill:使用法:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...またはkill -l [sigspec]これは、コマンドを実行したときに得られるものです
Sudhir Belagali

2
@SudhirBelagaliはスーパーユーザーでそれを行いましたsudo
Marcel Djaman、

5
私のMacでも動作しました
18年

2
プロセスIDを表示する権限がない場合があるので、その必要があることを付け加えておきますsudo lsof -i:8080
Akavall

1
なぜ2番目のヒントはより暴力的ですか?
Webwoman 2018

281

コマンドを使用する

 sudo netstat -plten |grep java

プロセスgrep javaとしてのtomcat用途javaとして使用されます。

プロセスのリストにポート番号とプロセスIDが表示されます

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

前の番号/javaはプロセスIDです。killコマンドを使用してプロセスを終了します

kill -9 16085

-9 プロセスが強制終了されることを意味します。


11
を介してプロセス名を取得するには、ルート権限が必要になる可能性があることを追加したい場合がありnetstatます。
JonasSchäfer12年

2
@JonasWielickiあなたはroot権限なしであなたが所有しているものを見ることができます。
dbliss

netstatにはroot権限が必要でした。プロセスの原因を実際に知る方法はありますか?私が知る限り、すべてのアプリケーションを閉じていましたが、ターミナルウィンドウからプロセスを誤ってバックグラウンドタスクにプッシュした可能性があります。たぶん私は最初にすべてのプロセスを表示するために端末コマンド 'ps'を実行したはずです...
JesseBoyd

150

この1行を追加して、特定のポートでLISTENのみを強制終了します。

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)


9
これが一番の答えだと思います。@Gal Brachaに感謝
Sam Kah Chiin

2
私のブラウザーも殺さないので、これは最良の解決策です!
Russo

ベストアンサー!シンプル、簡潔、そして正しく仕事をします。
Tsar Bomba

116

lsofコマンドを使用できます。このようなポート番号を8090としましょう

lsof -i:8090

このコマンドは、このポートで開いているプロセスのリストを返します。

何かのようなもの…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

ポートを解放するには、ポートを使用してプロセスを強制終了します(プロセスIDは75782)…

kill -9 75782

これは私のために働いた。これが元の投稿からのリンクです:link


1
プロセスを強制終了するには、kill -9 75782のように-9を使用する必要があります。時にはkillだけではkillされないプロセスがいくつかある
veer7

73

ポート番号8080で実行されているプロセスを強制終了する場合は、まず8080ポートのプロセス識別番号(PID)を見つけてから強制終了する必要があります。次のコマンドを実行して、8080ポート番号PIDを見つけます。

sudo lsof -t -i:8080

ここに、

  • sudo-管理者権限(ユーザーIDとパスワード)を要求するコマンド。
  • lsof-ファイルのリスト(関連プロセスをリストするためにも使用されます)
  • -t-プロセスIDのみを表示
  • -i-インターネット接続関連のプロセスのみを表示します
  • :8080-このポート番号のプロセスのみを表示します

したがって、次のコマンドを使用してPIDを簡単に強制終了できます。

sudo kill -9 <PID>

ここに、

  • kill-プロセスを強制終了するコマンド
  • -9-強制的に

次のコマンドを使用して、1つのコマンドで特定のポートのプロセスを強制終了できます。

sudo kill -9 $(sudo lsof -t -i:8080)

詳細については、次のリンクを参照してください 。Linuxの特定のポートでプロセスを強制終了する方法


相棒、ありがとな。sudo kill -9 $(sudo lsof -t -i:8080)私のために働いた
Junaid


41

これは、実行中のすべてのプロセスIDをstdoutに出力します<port_number>

fuser -n tcp <port_number> 

また、いくつかのものをstderrに出力します。

fuser -n tcp <port_number> 2> /dev/null

次に、これらのプロセスIDをkillコマンドに指定できます。

sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

これをたくさん行う場合は、これを関数に含めることもできます。

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}

35

タスクのPIDを取得して強制終了します。

lsof -ti:8080 | xargs kill

答えてくれてありがとう。Mac OSで非常にスムーズに動作します。あなたは最高です。ただの投票。
AMIC MING

1
のように、ポート範囲でもうまく機能しますlsof -ti:8080-8089 | xargs kill
dvlsg

34

特定のポートで実行されているサービスのPIDを知るには:

netstat -tulnap | grep :*port_num*

そのプロセスの説明が表示されます。killまたはkill -9 pidを使用します。簡単に殺される。

例えば

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 

今:

kill -9 1880

すべてのコマンドを実行することを忘れないでください root


30

一発ギャグ

kill -9 $(lsof -t -i tcp:8080)

ここで説明:組み合わせて使用 lsof and kill

root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

pidを選択して使用 kill

kill 23672


16

以下に示すように、ポート番号を選択し、grep in netstatコマンドを適用します。

netstat -ap | grep :7070

コンソール出力

tcp 0 0 ::: 7070 ::: * LISTEN 3332 / java

PID(プロセス識別番号)に基づいてサービス強制終了ます

kill -9 3332

13
  1. lsof -i tcp:8000 このコマンドは、ポート8000​​で実行中のプロセスに関する情報を一覧表示します

  2. kill -9 [PID] このコマンドはプロセスを強制終了します


数週間前に偶然これに投票したことに気づきました。あなたの回答を少し編集すれば削除できるはずです
Robin-Hoodie

12

Linux:ポートがわかっている場合は、最初にこのコマンドのPIDを見つけることができます。

netstat -tulpn 

例:-

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

次に、killプロセスを実行します。次のコマンドを実行します。

kill -9 PID

例:-

キル-9 15986


10

Linux:ポートがわかっている場合は、このコマンドを使用できます。

netstat -plten | grep LISTEN | grep 8080

AIX

netstat -Aan | grep LISTEN | grep 8080

次に、最初の列(例:f100050000b05bb8)を取得して、次のコマンドを実行します。

rmsock f100050000b05bb8 tcpcb

プロセスを強制終了します。


10

あなたは知ることができます実行されているすべてのポートのリストにその詳細(PID、アドレスなど)とともに、システム内を:

netstat -tulpn

次のコマンドでポート番号を指定すると、特定のポート番号の詳細を確認できます。

sudo netstat -lutnp | grep -w '{port_number}'

例:sudo netstat -lutnp | grep -w '8080'詳細は次のように提供されます。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

pidを使用してプロセスを強制終了する場合は、次のようにしますkill -9 {PID}

ポート番号を使用してプロセスを強制終了する場合fuser -n tcp {port_number}

sudoアクセスできない場合に使用します。


6

kill -9 `fuser 8080/tcp|xargs -n 1`、このコマンドは、TCP接続でポート8080をリッスンするプロセスも強制終了します


4
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp

結果:80 / tcp:1858 1867 1868 1869 1871

プロセスを1つずつ強制終了

キル-9 1858


3

私は、利用可能なLinuxツールのセットが制限されているYocto Linuxシステムに取り組んでいます。特定のポート(1883)を使用していたプロセスを強制終了したかった。

まず、リッスンしているポートを確認するために、次のコマンドを使用しました。

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

次に、次の方法でポート1883を使用してプロセスの名前を見つけました。

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

上記のように、それはプログラムです /usr/sbin/mosquittoポート1883を使用してです。

最後に、プロセスを終了しました。

root@root:~# systemctl stop mosquitto

systemctlこの場合、私はsystemdサービスだったので使用しました。


2

私の場合、cent osは提案された回答にいくつかの問題があります。だから私は次の解決策を使いました:

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill

1

@ veer7が言ったことに基づいて構築する:

ポートに何があったかを知りたい場合は、それを殺す前にこれを行ってください。

$ sudo netstat -plten |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

「ps」とnetstatが報告したプロセスの数を使用します


1

Git Bashの他の方法:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}

1
  1. 最初にプロセスを確認します netstat -lt
  2. プロセスIDを確認する fuser <port number>/tcp
  3. ポートで実行されているプロセスを強制終了します kill <process id>

-3

Windowsでは、netstat -ano | grep "8080"次のメッセージが表示されますTCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

を使用してPIDを強制終了できます taskkill /F /PID 10076


問題は明らかにLinuxの助けを求めていることです。Windowsではありません。
ベビーケーキ16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.