1303 Stimmen

Wie man einen Prozess, der auf einem bestimmten Port in Linux läuft, beendet?

Ich habe versucht, den Tomcat mit ./shutdown.sh aus dem Tomcat /bin Verzeichnis zu schließen. Aber ich habe festgestellt, dass der Server nicht ordnungsgemäß geschlossen wurde. Und deshalb konnte ich nicht neu starten. Mein Tomcat läuft auf Port 8080.

Ich möchte den Tomcat-Prozess, der auf Port 8080 läuft, beenden. Zuerst möchte ich die Liste der Prozesse haben, die auf einem bestimmten Port (8080) laufen, um auswählen zu können, welchen Prozess ich beenden möchte.

4voto

Gunjan Paul Punkte 493
  1. Überprüfen Sie zuerst den Prozess netstat -lt
  2. Überprüfen Sie die Prozess-ID fuser /tcp
  3. Beenden Sie den Prozess, der auf dem Port läuft kill

3voto

Anderer Weg mit Git Bash:

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

3voto

Kamesh Jungi Punkte 5864

In meinem Fall hat Cent OS ein Problem mit der vorgeschlagenen Antwort. Also habe ich folgende Lösung verwendet :

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

2voto

JesseBoyd Punkte 892

Um auf das aufzubauen, was @veer7 gesagt hat:

Wenn du wissen möchtest, was auf dem Port war, mach das bevor du es beendest.

$ 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

Verwende 'ps' und die Nummer des Prozesses, den netstat zurückgemeldet hat

2voto

Punnerud Punkte 5188

Wie man einen Prozess beendet, wenn der Dienst am Port nicht antwortet

timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi

Was es macht

  1. Starte 'timeout' mit einer Sekunde, um telnet zum Beenden zu bringen
  2. ' 2>&1 | ' leitet Fehlermeldungen weiter, ohne zu beenden
  3. Wenn die Fehlermeldung 'Unable' enthält, wird der Code ausgeführt, um den Prozess zu beenden, der den Port 8080 blockiert

Dies kann in einer Datei platziert und regelmäßig aus 'sudo crontab' ausgeführt werden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X