it-swarm.com.de

Suchen Sie nach Prozesssperren (und beenden Sie sie), indem Sie den Port 3000 auf dem Mac installieren

Wie finde ich Prozesse, die meine TCP-Ports abhören/verwenden? Ich bin auf Mac OS X. 

Manchmal, nach einem Absturz oder einem Fehler, sperrt meine Rails-App den Port 3000. Ich kann ihn nicht mit ps -ef finden ... Wie finde ich das dumme Ding und töte es brutal? 

Wenn es geht

Rails server

Ich bekomme

Adresse bereits verwendet - bind (2) (Errno :: EADDRINUSE)

Update 2014:

Um einige der folgenden Antworten zu vervollständigen: Nach dem Ausführen der Kill-Befehle kann es erforderlich sein, die PID-Datei zu löschen. rm ~/mypath/myrailsapp/tmp/pids/server.pid

1286
oma
  1. Sie können netstat ausprobieren.

    netstat -vanp tcp | grep 3000
    
  2. Für macOS El Capitan und neuer (oder falls Ihr netstat -p nicht unterstützt) verwenden Sie lsof

    Sudo lsof -i tcp:3000 
    
  3. Für Centos 7 use

    netstat -vanp --tcp | grep 3000
    
2147
ghostdog74

Finden:

[Sudo] lsof -i :3000

Töten:

kill -9 <PID>
1399

Nichts hat für mich gearbeitet. Jeder andere mit meiner Erfahrung könnte folgendes versuchen (arbeitete für mich):

Lauf:

lsof -i :3000 (where 3000 is your current port in use)

dann den Status der gemeldeten PID überprüfen:

ps ax | grep <PID>

endlich "Beginne damit":

kill -QUIT <PID>
129
Austin

Ein Einzeiler, um die PID des Prozesses mithilfe von Port 3000 zu extrahieren und abzubrechen.

lsof -ti:3000 | xargs kill

Die -t-Markierung entfernt alles außer der PID aus der lsof-Ausgabe, wodurch es einfach ist, sie zu töten.

109
Zlemini

Sie können lsof -i:3000 verwenden.

Das ist "List Open Files". Dadurch erhalten Sie eine Liste der Prozesse sowie der verwendeten Dateien und Ports.

89
DerMike

Erstellen Sie in Ihrem .bash_profile eine Verknüpfung für den Prozess terminate the 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

Rufen Sie dann $terminate auf, wenn es blockiert ist.

53
alexzg

Um einen solchen Prozess gewaltsam zu beenden, verwenden Sie den folgenden Befehl 

lsof -n -i4TCP:3000 

Dabei ist 3000 die Portnummer, an der der Prozess ausgeführt wird

dies gibt die Prozess-ID (PID) .__ zurück und führt sie aus 

kill -9 "PID"

Ersetzen Sie die PID durch die Nummer, die Sie nach dem ersten Befehl erhalten 

 For Instance, if I want kill the process running on port 8080

52
tadtab
lsof -P | grep ':3000' | awk '{print $2}'

Damit erhalten Sie nur die auf MacOS getestete PID.

34
Kris

Diese einzige Befehlszeile ist leicht zu merken: 

npx kill-port 3000

Für ein leistungsfähigeres Tool mit Suche:

npx fkill-cli 


PS: Sie verwenden Javascript-Pakete von Drittanbietern.

Quellen: Tweet | github

32
Bruno Lemos

Eine der Möglichkeiten, einen Prozess an einem Port zu beenden, ist die Verwendung der Python-Bibliothek: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Einmal installiert, einfach:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
27
YBathia

So zeigen Sie die Prozesse an, die den Port blockieren:

netstat -vanp tcp | grep 3000

So beenden Sie die Prozesse, die den Port blockieren:

kill $(lsof -t -i :3000)

26
Henry

Führen Sie die Befehlszeile auf OS-X El Capitan aus:

kill -kill `lsof -t -i tcp:3000`

Die umgekehrte Option von lsof gibt nur die PID zurück.

26
JE42

Finde die offene Verbindung  

lsof -i -P | grep -i "hören"

Töten nach Prozess-ID

töte -9 'PID'

22
Sourabh Bhagat

Finde PID und brich den Prozess ab.

lsof -ti:3000 | xargs kill
17
Rahul Garg

Mögliche Wege, um dies zu erreichen: 

oben

Mit dem Befehl top können Sie die Ressourcennutzung Ihres Systems und die Prozesse anzeigen, die die meisten Systemressourcen beanspruchen. Oben wird eine Liste der Prozesse angezeigt, wobei die Prozesse die meiste CPU oben verwenden.

ps

Der Befehl ps listet die laufenden Prozesse auf. Der folgende Befehl listet alle auf Ihrem System ausgeführten Prozesse auf:

ps -A

Sie können die Ausgabe auch über grep weiterleiten, um nach einem bestimmten Prozess zu suchen, ohne andere Befehle verwenden zu müssen. Der folgende Befehl würde nach dem Firefox-Prozess suchen:

ps -A | grep firefox

Die gebräuchlichste Art, Signale an ein Programm zu übergeben, ist der Befehl kill.

kill PID_of_target_process

lsof

Liste aller geöffneten Dateien und der Prozesse, die sie geöffnet haben.

lsof -i -P | grep -i "listen"
kill -9 PID

oder

 lsof -i tcp:3000 
13
smooth

Finden und töten:

Diese einzelne Befehlszeile ist einfach und funktioniert einwandfrei. 

kill -9 $(lsof -ti tcp:3000)
13
Dylan Breugne

Einfachste Lösung : Töten Sie mehrere Ports mit einem einzigen Zeilenbefehl.

kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed

lsof -t -i: 3000

82500

isof-t-i: 3001

82499

isof-t-i: 3001.3000

82499 82500

töte $ (lsof -t -i: 3001,3000)

Beendet die Prozesse 82499 und 82500 mit einem einzigen Befehl.

lsof -t -i: 3000

isof-t-i: 3001

Sie können dies in package.json-Skripten verwenden

"scripts": { "start": "kill $(lsof -t -i:3000,3001) && npm start" }

11
Abhijith

Mit sindresorhus 's fkill können Sie Folgendes tun:

$ fkill :3000
5
Kodie Grantham

Zu ~/.bash_profile hinzufügen:

function killTcpListen () {
  kill -QUIT $(Sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

Dann source ~/.bash_profile und ausführen

killTcpListen 8080

5
rofrol

Ich habe eine kleine Funktion dafür erstellt und füge sie zu deiner RC-Datei hinzu (.bashrc, .zshrc oder was auch immer)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

dann können Sie einfach kill-by-port 3000 eingeben, um Ihren Rails-Server zu beenden (wobei 3000 für jeden Port verwendet wird, auf dem er läuft).

andernfalls könnten Sie einfach kill -9 $(cat tmp/pids/server.pid) aus dem Rails-Stammverzeichnis eingeben

3
Caleb Keene

Mit diesen beiden Befehlen können Sie den Serverprozess leichter finden und beenden

  1. lsof -wni tcp: 3000
  2. töte -9 pid
3
Saif chaudhry

TL; DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

Wenn Sie sich in einer Situation befinden, in der sowohl Clients als auch Server den Port verwenden, z.

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

dann wollen Sie wahrscheinlich nicht beide töten.

In dieser Situation können Sie -sTCP:LISTEN verwenden, um nur die PID von Prozessen anzuzeigen, die zuhören. In Kombination mit dem -t terse-Format können Sie den Prozess automatisch abbrechen:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3
Benjie

lsof -i tcp:port_number - listet den Prozess auf, der auf diesem Port ausgeführt wird

kill -9 PID - bricht den Prozess ab

in deinem Fall wird es so sein

lsof -i tcp:3000 von Ihrem Terminal finden Sie die PID des Prozesses

kill -9 PID

1
Shan

Hier ist eine Helper-Bash-Funktion, um mehrere Prozesse nach Namen oder Port zu beenden

fkill() {
  for i in [email protected];do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs [email protected] sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Verwendungszweck:

$ fkill [process name] [process port]

Beispiel:

$ fkill someapp :8080 node :3333 :9000
1
Miguel Mota

Sie sollten dies versuchen. Diese Technik ist unabhängig vom Betriebssystem.

In Ihrer Anwendung befindet sich ein Ordner namens tmp, in dem sich ein weiterer Ordner mit dem Namen pids befindet. Diese Datei enthält die Server-PID-Datei. Löschen Sie einfach diese Datei. port tötet sich automatisch.

Ich denke, das ist der einfache Weg. 

1
Arun P

Sie können dies versuchen

netstat -vanp tcp | grep 3000
0
Foram Thakral

Wenn Sie einen Code-freien Weg wünschen - öffnen Sie den Aktivitätsmanager und erzwingen Sie den Kill-Knoten :)

Verwenden Sie den folgenden Befehl, um den Prozess an Port 3000 abzubrechen. kill $(lsof -t -i:3000)

0
vinayb21