Tomcatの./shutdown.sh
ディレクトリにある/bin
を使ってTomcatを閉じようとしました。しかし、サーバーが正しく閉じられていないことがわかりました。そして私は再起動することができませんでした
私のTomcatはポート8080
で動作しています。
私は8080
で実行されているTomcatプロセスを強制終了したいのです。どのプロセスを強制終了するかを選択するために、まず特定のポート(8080)で実行中のプロセスのリストを表示したいと思います。
コマンドを使う
Sudo netstat -plten |grep Java
Tomcat
としてgrep Java
を使用すると、プロセスとしてJava
が使用されます。
それはポート番号とプロセスIDでプロセスのリストを表示します
tcp6 0 0 :::8080 :::* LISTEN
1000 30070621 16085/Java
/Java
の前の番号はプロセスIDです。今すぐプロセスを強制終了するためにkill
コマンドを使用してください
kill -9 16085
-9
はプロセスが強制終了されることを意味します。
このfuser 8080/tcp
はそのポートにバインドされているプロセスのPIDを表示します。
そしてこのfuser -k 8080/tcp
はそのプロセスを殺します。
Linux上でのみ動作します。もっと普遍的なのはlsof -i4
(またはIPv6の場合は6)の使用です。
ポート8080をリッスンするプロセスを一覧表示するには:
lsof -i:8080
ポート8080をリッスンしているプロセスを強制終了するには:
kill $(lsof -t -i:8080)
またはより激しく:
kill -9 $(lsof -t -i:8080)
(-9
はSIGKILL - terminate immediately/hard kill
シグナルに対応します: キルシグナルのリスト および キルコマンドの-9オプションの目的は? を参照してください。kill
にシグナルが指定されていない場合、-15
またはsoft kill
とも呼ばれるTERMシグナルが送信されますが、プロセスを強制終了できない場合があります。
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
私はこのワンライナーを特定のポートのLISTENだけに追加します。
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
ポート番号8080で実行されているプロセスを強制終了したい場合は、まず8080ポートのプロセス識別番号(PID)を見つけてそれを強制終了する必要があります。次のコマンドを実行して8080ポート番号PIDを見つけます。
Sudo lsof -t -i:8080
ここに、
そのため、次のコマンドを使用してPIDを簡単に削除できます。
Sudo kill -9 <PID>
ここに、
次のコマンドを使用して、特定のポート上のプロセスを強制終了するために1つのコマンドを使用できます。
Sudo kill -9 $(Sudo lsof -t -i:8080)
詳細については、次のリンクを参照してください。 Linuxの特定のポートでプロセスを強制終了する方法
これは<port_number>
で実行されているすべてのもののプロセスIDを標準出力に出力します。
fuser -n tcp <port_number>
また、標準エラー出力にも出力します。
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)
}
特定のポートで実行されているサービスの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
として実行することを忘れないでください
こんな感じで
Sudo fuser -n tcp -k 8080
タスクのPIDを取得して殺します。
lsof -ti:8080 | xargs kill
Linux :ポートを知っていれば、最初にこのコマンドのPIDを見つけることができます。
netstat -tulpn
例: -
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
あなたはそれからkillプロセスを取ります。次のコマンドを実行してください。
-9 PIDを殺す
例: -
殺す-9 15986
lsof -i tcp:8000
このコマンドは、ポート8000で実行中のプロセスに関する情報をリストします。
kill -9 [PID]
このコマンドはプロセスを強制終了します
Linux :ポートがわかっていればこのコマンドを使えます:
netstat -plten | grep LISTEN | grep 8080
_ aix _ :
netstat -Aan | grep LISTEN | grep 8080
次に、最初の列(例:f100050000b05bb8)に進み、以下のコマンドを実行します。
rmsock f100050000b05bb8 tcpcb
プロセスを殺します。
kill -9 `fuser 8080/tcp|xargs -n 1`
、このコマンドはTCP connectionでポート8080で待機するプロセスも強制終了
システム内の実行中の全ポートのリストとその詳細(pid、addressなど)を知ることができます。
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
を使用してください。
ポート番号を選択し、以下に示すようにnetstatコマンドでgrepを適用します
netstat -ap | grep :7070
コンソール出力
tcp 0 0 ::: 7070 ::: * LISTEN 3332/Java
PIDに基づいてserviceを強制終了します(プロセス識別番号)
kill -9 3332
Sudo apt-get install psmisc (or Sudo yum install psmisc)
Sudo fuser 80/tcp
結果: 80/tcp:1858 1867 1868 1869 1871
プロセスを1つずつ強制終了する
-9 1858を殺す
Git Bashの他の方法:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
@ 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が報告したプロセスの番号を使用