Vind (en stop) procesvergrendelingspoort 3000 op Mac

Hoe vind (en stop) ik processen die luisteren naar/gebruik maken van mijn tcp-poorten? Ik gebruik mac os x.

Soms, na een crash of een bug, vergrendelt mijn rails-app poort 3000. Ik kan hem niet vinden met ps -ef…

Als je aan het doen bent

rails server

Ik snap

Adres al in gebruik – bind(2) (Errno::EADDRINUSE)

update 2014:

Om enkele van de onderstaande antwoorden te voltooien: Na het uitvoeren van de kill-commando’s kan het nodig zijn om het pid-bestand te verwijderen rm ~/mypath/myrailsapp/tmp/pids/server.pid


Antwoord 1, autoriteit 100%

  1. U kunt netstat

    proberen

    netstat -vanp tcp | grep 3000
    
  2. Voor macOS El Capitanen nieuwer (of als uw netstat -pniet ondersteunt), gebruikt u lsof

    lsof -i tcp:3000 
    
  3. Voor Centos 7gebruik:

    netstat -vanp --tcp | grep 3000
    

Antwoord 2, autoriteit 63%

Zoeken:

sudo lsof -i :3000

Dood:

kill -9 <PID>

Antwoord 3, autoriteit 9%

Snelle en eenvoudigere oplossing:

Voor het uitschakelen van een enkele poort:

kill $(lsof -ti:3000)

Voor meerdere poorten:

kill $(lsof -ti:3000,3001)

#3000 is de poort die moet worden vrijgemaakt

Dood meerdere poorten met een enkele regelopdracht:

kill $(lsof -ti:3000,3001)

#hier zijn meerdere poorten 3000 en 3001 de poorten die moeten worden vrijgemaakt

lsof -ti:3000

82500 (proces-ID)

lsof -ti:3001

82499

lsof -ti:3001,3000

82499
82500

doden $(lsof -ti:3001,3000)

Beëindigt zowel 82499- als 82500-processen in één opdracht.

Voor gebruik in package.jsonscripts:

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

Antwoord 4, autoriteit 7%

Niets hierboven werkte voor mij. Iedereen met mijn ervaring zou het volgende kunnen proberen (werkte voor mij):

Uitvoeren:

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

controleer vervolgens de status van de gerapporteerde PID:

ps ax | grep <PID>

eindelijk, “begon ermee”:

kill -QUIT <PID>

Antwoord 5, autoriteit 5%

Een one-liner om de PID van het proces te extraheren met poort 3000 en het te doden.

lsof -ti:3000 | xargs kill

De vlag -t verwijdert alles behalve de PID uit de lsof-uitvoer, waardoor het gemakkelijk te doden is.


Antwoord 6, autoriteit 4%

Deze enkele opdrachtregel is gemakkelijk te onthouden:

npx kill-port 3000

Je kunt ook meerdere poorten tegelijk doden:

npx kill-port 3000 3001 3002

Voor een krachtiger hulpmiddel met zoeken:

npx fkill-cli


PS: Ze gebruiken javascript-pakketten van derden. npxis ingebouwd in Node.js.

Bronnen: tweet| github


Antwoord 7, autoriteit 3%

Je kunt lsof -i:3000gebruiken.

Dat is “Lijst met geopende bestanden”. Dit geeft je een lijst van de processen en welke bestanden en poorten ze gebruiken.


Antwoord 8, autoriteit 2%

Gebruik het volgende commando om een dergelijk proces met geweld te beëindigen

lsof -n -i4TCP:3000  
OR lsof -i:3000

Waarbij 3000 het poortnummer is waarop het proces wordt uitgevoerd

dit geeft de proces-id(PID) terug
en rennen

kill -9 "PID"

Vervang PID door het nummer dat je krijgt na het uitvoeren van de eerste opdracht


Antwoord 9, autoriteit 2%

Maak in uw .bash_profileeen snelkoppeling voor terminatehet 3000-proces:

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

Bel vervolgens $terminateaan als het geblokkeerd is.


Antwoord 10

Om meerdere poorten te doden.

$ npx kill-port 3000 8080 8081
Process on port 3000 killed
Process on port 8080 killed
Process on port 8081 killed

Ik hoop dat dit helpt!


Antwoord 11

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

Dit geeft je alleen de pid, getest op MacOS.


Antwoord 12

Uitvoeren in de opdrachtregel op OS-X El Captain:

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

Korte optie van lsof retourneert alleen de PID.


Antwoord 13

Een van de manieren om een proces op een poort te beëindigen, is door de python-bibliotheek te gebruiken: freeport (https://pypi.python.org/pypi/freeport/0.1.9) . Eenmaal geïnstalleerd, eenvoudig:

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

Antwoord 14

Om de processen te bekijken die de poort blokkeren:

netstat -vanp tcp | grep 3000

Om de processen te stoppen die de poort blokkeren:

kill $(lsof -t -i :3000)


Antwoord 15

Vind de open verbinding

lsof -i -P | grep -i “luister”

Dood op proces-ID

kill -9 ‘PID’


Antwoord 16

Vind en dood:

Deze enkele opdrachtregel is eenvoudig en werkt correct.

kill -9 $(lsof -ti tcp:3000)

Antwoord 17

Mogelijke manieren om dit te bereiken:

boven

De opdracht top is de traditionele manier om het brongebruik van uw systeem te bekijken en de processen te zien die de meeste systeembronnen in beslag nemen. Boven toont een lijst met processen, met de processen die de meeste CPU gebruiken bovenaan.

ps

Het ps-commando geeft een overzicht van lopende processen. De volgende opdracht geeft een overzicht van alle processen die op uw systeem worden uitgevoerd:

ps -A

Je kunt de uitvoer ook door grep sturen om naar een specifiek proces te zoeken zonder andere commando’s te gebruiken. De volgende opdracht zoekt naar het Firefox-proces:

ps -A | grep firefox

De meest gebruikelijke manier om signalen door te geven aan een programma is met het kill-commando.

kill PID_of_target_process

lsof

Lijst van alle geopende bestanden en de processen waarmee ze zijn geopend.

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

of

lsof -i tcp:3000 

Antwoord 18

lsof -i tcp:port_number– geeft het proces weer dat op die poort wordt uitgevoerd

kill -9 PID– zal het proces stoppen

in jouw geval zal het zijn

lsof -i tcp:3000vanaf uw terminal
vind de PID van het proces

kill -9 PID


Antwoord 19

Deze twee commando’s helpen je het serverproces te vinden en te beëindigen

  1. lsof -wni tcp:3000
  2. kill -9 pid

Antwoord 20

Ik heb hier een kleine functie voor gemaakt, voeg het toe aan je rc-bestand (.bashrc, .zshrcof wat dan ook)

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
}

dan kun je gewoon kill-by-port 3000typen om je rails-server te doden (vervang 3000 voor de poort waarop deze draait)

Als dat niet lukt, kun je altijd gewoon kill -9 $(cat tmp/pids/server.pid)typen in de hoofdmap van rails


Antwoord 21

Toevoegen aan ~/.bash_profile:

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

Vervolgens source ~/.bash_profileen start

killTcpListen 8080


Antwoord 22

Gebruik sindresorhus‘s fkilltool, je kunt dit doen:

$ fkill :3000

Antwoord 23

Werkt voor mij voor het beëindigen van node(Mac OS Catalina)

killall -9 node

Antwoord 24

TL;DR:

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

Als u zich in een situatie bevindt waarin zowel clients als servers de poort gebruiken, bijvoorbeeld:

$ 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)

dan wil je ze waarschijnlijk niet allebei doden.

In deze situatie kun je -sTCP:LISTENgebruiken om alleen de pid te tonen van processen die luisteren. Door dit te combineren met het -tkorte formaat, kun je het proces automatisch beëindigen:

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

Antwoord 25

kill -9 $(lsof -ti:3000)

werkt altijd voor mij op macOS.

Als u aan een node.js-project werkt, kunt u dit toevoegen aan package.json-scripts zoals;

"scripts": {
    ...
    "killme": "kill -9 $(lsof -ti:3000)",
    ...
  },

dan

npm run killme

Ook als u een systeembrede alias voor uw macOS wilt toevoegen, volgt u deze stappen;

  1. Navigeer naar uw homedirectory:

    cd ~

  2. Open .bash_profile of zsh profiel met nano of vim:

    vi .bash_profile

  3. Voeg een alias toe (druk op i):

    alias killme=”kill -9 $(lsof -ti:3000)”

  4. bestand opslaan

  5. terminal herstarten

typ killmein terminal

Natuurlijk kun je poort 3000 veranderen naar wat je wilt.


Antwoord 26

Probeer dit eens. Deze techniek is OS-onafhankelijk.

In uw applicatie bevindt zich een map met de naam tmp, daarbinnen bevindt zich een andere map met de naam pids.
Dat bestand bevat het server-pid-bestand.
Verwijder dat bestand gewoon. poort automatisch zichzelf doden.

Ik denk dat dit de makkelijkste manier is.


Antwoord 27

Hier is een helper bash-functie om meerdere processen op naam of poort te doden

fkill() {
  for i in $@;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 -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Gebruik:

$ fkill [process name] [process port]

Voorbeeld:

$ fkill someapp :8080 node :3333 :9000

Antwoord 28

Je kunt dit proberen

netstat -vanp tcp | grep 3000

Antwoord 29

mijn favoriete oneliner:
sudo kill `sudo lsof -t -i:3000`


Antwoord 30

Voer de onderstaande opdracht uit om poort 3000 op mac te beëindigen

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

Other episodes