Trouver (et tuer) le port de verrouillage 3000 sur Mac

Comment puis-je trouver des processus qui écoutent/utilisent mes ports tcp? Je suis sur mac os X.

parfois, après un crash ou un bug, mon application rails verrouille le port 3000. Je ne le trouve pas en utilisant ps-ef... Comment puis-je trouver la chose stupide et la tuer, brutalement... ?

rails server

je reçois

adresse déjà utilisée-bind(2) (Errno::EADDRINUSE)

2014 mise à jour:

pour compléter certaines des réponses ci-dessous: après avoir exécuté les commandes kill, la suppression du fichier pid pourrait être nécessaire rm ~/mypath/myrailsapp/tmp/pids/server.pid

1143
demandé sur Soviut 2010-10-04 16:19:16

26 réponses

  1. Vous pouvez essayer netstat

    netstat -vanp tcp | grep 3000
    
  2. pour macOS El Capitan et plus récent (ou si votre netstat ne supporte pas -p ), utilisez lsof

    sudo lsof -i tcp:3000 
    
  3. Pour Centos 7 utiliser

    netstat -vanp --tcp | grep 3000
    
1875
répondu ghostdog74 2018-07-18 14:56:42

Rechercher:

[sudo] lsof -i :3000

Tuer:

kill -9 <PID>
1240
répondu Filip Spiridonov 2017-06-13 03:50:10

rien de ce qui précède n'a fonctionné pour moi. N'importe qui d'autre avec mon expérience pourrait essayer ce qui suit (travaillé pour moi):

Run:

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

puis vérifier l'état du PID déclaré:

ps ax | grep <PID>

enfin, "retire-toi avec ça":

kill -QUIT <PID>
106
répondu Austin 2016-10-25 05:45:11

une monocouche pour extraire le PID du procédé à l'aide du port 3000 et le tuer.

lsof -ti:3000 | xargs kill

le drapeau-t supprime tout sauf le PID de la sortie lsof, ce qui le rend facile à tuer.

87
répondu Zlemini 2016-08-05 21:03:38

vous pouvez utiliser lsof -i:3000 .

C'est-à-dire"List Open Files". Cela vous donne une liste des processus et des fichiers et ports qu'ils utilisent.

85
répondu DerMike 2013-07-01 01:23:34

dans votre .bash_profile , créez un raccourci pour terminate le procédé 3000:

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

alors, appelez $terminate si c'est bloqué.

50
répondu alexzg 2013-07-26 01:20:24

pour tuer par la force un processus comme celui-ci, utilisez la commande suivante

lsof -n -i4TCP:3000 

où 3000 est le numéro de port le processus est en cours à

renvoie l'identifiant du processus(PID)) et courir

kill -9 "PID"

remplacer PID par le nombre que vous obtenez après avoir exécuté la première commande

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

47
répondu tadtab 2018-06-20 05:57:40
lsof -P | grep ':3000' | awk '{print }'

cela vous donnera juste le pid, testé sur MacOS.

34
répondu Kris 2012-08-03 21:14:00

une des façons de tuer un processus sur un port est d'utiliser la bibliothèque python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Une fois installé, il suffit de:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
26
répondu YBathia 2017-07-25 22:59:08

Exécuter en ligne de commande sur OS-X El Capitaine:

kill -kill `lsof -t -i tcp:3000`
L'option

de lsof ne renvoie que le PID.

24
répondu JE42 2016-06-23 18:15:09

cette ligne de commande unique est facile à retenir:

npx kill-port 3000

pour un outil de recherche plus puissant:

npx fkill-cli


PS: ils utilisent des paquets javascript tiers

Sources: tweet / github

23
répondu Bruno Lemos 2018-07-18 16:25:30

trouver la connexion ouverte

lsof - I-P | grep-i "listen"

tuer par numéro de procédé

kill -9 "PID"

22
répondu Sourabh Bhagat 2016-07-17 11:10:19

moyens possibles d'y parvenir:

haut

la commande supérieure est la façon traditionnelle de voir l'utilisation des ressources de votre système et de voir les processus qui absorbent le plus de ressources du système. Top affiche une liste de processus, avec ceux qui utilisent le plus de CPU en haut.

ps

la commande ps liste les processus en cours d'exécution. La commande suivante liste tous les processus tournant sur votre système:

ps -A

vous pouvez également pipe la sortie par grep pour rechercher un processus spécifique sans utiliser d'autres commandes. La commande suivante recherchera le processus Firefox:

ps -A | grep firefox

la façon la plus courante de transmettre des signaux à un programme est avec la commande kill.

kill PID_of_target_process

lsof

Liste de toutes les les fichiers et les processus qui les a ouverts.

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

ou

 lsof -i tcp:3000 
12
répondu smooth 2017-01-29 11:34:06

ajouter à ~/.bash_profile :

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

puis source ~/.bash_profile et courir

killTcpListen 8080

5
répondu rofrol 2018-03-31 12:17:58

en utilisant sindresorhus 's fkill outil, vous pouvez le faire:

$ fkill :3000
5
répondu Kodie Grantham 2018-04-18 18:31:38

trouver et tuer:

cette ligne de commande unique est facile et fonctionne correctement.

kill -9 $(lsof -ti tcp:3000)
5
répondu Dylan Breugne 2018-08-28 06:26:13

pour voir les processus bloquant le port:

netstat -vanp tcp | grep 3000

Pour Tuer le processus de blocage du port:

kill $(lsof -t -i :3000)

5
répondu Henry 2018-09-12 04:36:01

TL; DR:

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

si vous êtes dans une situation où il y a à la fois des clients et des serveurs utilisant le port, par exemple:

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

alors vous ne voulez probablement pas tuer les deux.

dans cette situation, vous pouvez utiliser -sTCP:LISTEN pour ne montrer que le pid des processus qui écoutent. En combinant cela avec le format -t vous pouvez automatiquement tuer le processus:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3
répondu Benjie 2018-05-08 16:17:11

j'ai fait une petite fonction pour cela, l'ajouter à votre fichier rc ( .bashrc , .zshrc ou autre)

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

alors vous pouvez simplement taper kill-by-port 3000 pour tuer votre serveur rail (remplaçant 3000 pour le port sur lequel il tourne)

sinon, vous pouvez toujours taper kill -9 $(cat tmp/pids/server.pid) à partir du répertoire racine des rails

3
répondu Caleb Keene 2018-06-20 03:26:01

vous devriez essayer cette technique, elle est indépendante du système D'exploitation.

à côté de votre application il y a un dossier appelé tmp, à l'intérieur il y a un autre dossier appelé pids. Ce fichier contient le fichier pid du serveur. Supprimez simplement ce fichier. le port se tue automatiquement.

je pense que c'est la voie facile.

1
répondu Arun P 2018-08-12 14:02:11

Voici une fonction helper bash pour tuer plusieurs processus par nom ou port

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 }'|\
  xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Utilisation:

$ fkill [process name] [process port]

exemple:

$ fkill someapp :8080 node :3333 :9000
1
répondu Miguel Mota 2018-08-30 19:51:53

vous pouvez utiliser la commande

lsof -h

utilisation de cette commande pour trouver le port est

-i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]

dans votre cas, entrez

lsof -i :3000
0
répondu Amarjit Singh 2017-10-29 17:55:19

Si rien n'des travaux ci-dessus, essayez:

lsof -n -i4TCP:3000
0
répondu QuakeCore 2018-09-03 10:02:50

Étape 1: trouver le serveur qui est en cours D'exécution: ps aux | grep puma Étape 2: tuer ces serveurs Kill -9 [numéro de serveur]

0
répondu Thiện Nguyễn 2018-09-08 08:45:38

vous pouvez également modifier la configuration sur le port serveur (config/puma.rb) ligne 12.

$ port ENV.fetch ("PORT") { 3000 }

à

$ port ENV.fetch ("PORT") { 3001 }

ou tout port spécifique que vous jugez approprié. cela évite la nécessité d'une chasse au trésor pour les processus. vous pouvez toujours redémarrer votre ordinateur. aussi quand vous initialisez le serveur sur un autre port, il sera normalement tuer le premier serveur que vous aviez ouvertes.

0
répondu Ron 2018-09-23 17:34:21

vous devriez essayer ce code en utilisant le terminal:

$ killall -9 ruby
-5
répondu shakeel rauf 2017-10-30 08:41:59