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%
-
U kunt
netstat
proberen
netstat -vanp tcp | grep 3000
-
Voor macOS El Capitanen nieuwer (of als uw netstat
-p
niet ondersteunt), gebruikt ulsof
lsof -i tcp:3000
-
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.json
scripts:
"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. npx
is ingebouwd in Node.js.
Antwoord 7, autoriteit 3%
Je kunt lsof -i:3000
gebruiken.
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_profile
een snelkoppeling voor terminate
het 3000-proces:
terminate(){
lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9
}
Bel vervolgens $terminate
aan 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:3000
vanaf 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
- lsof -wni tcp:3000
- kill -9 pid
Antwoord 20
Ik heb hier een kleine functie voor gemaakt, voeg het toe aan je rc-bestand (.bashrc
, .zshrc
of 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 3000
typen 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_profile
en 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:LISTEN
gebruiken om alleen de pid te tonen van processen die luisteren. Door dit te combineren met het -t
korte 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;
-
Navigeer naar uw homedirectory:
cd ~
-
Open .bash_profile of zsh profiel met nano of vim:
vi .bash_profile
-
Voeg een alias toe (druk op i):
alias killme=”kill -9 $(lsof -ti:3000)”
-
bestand opslaan
-
terminal herstarten
typ killme
in 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)