web-dev-qa-db-fra.com

Rechercher (et tuer) le processus de verrouillage du port 3000 sur Mac

Comment trouver des processus qui écoute/utilise 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 parviens pas à le trouver avec ps -ef ... Comment trouver la chose stupide et la tuer brutalement ...? 

En faisant

Rails server

Je reçois

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

Mise à jour 2014:

Pour compléter certaines des réponses ci-dessous: Après avoir exécuté les commandes kill, il peut être nécessaire de supprimer le fichier pid. rm ~/mypath/myrailsapp/tmp/pids/server.pid

1286
oma
  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 use

    netstat -vanp --tcp | grep 3000
    
2147
ghostdog74

Trouver:

[Sudo] lsof -i :3000

Tuer:

kill -9 <PID>
1399
Filip Spiridonov

Rien ci-dessus n'a fonctionné pour moi. Toute autre personne avec mon expérience pourrait essayer ce qui suit (a travaillé pour moi):

Courir:

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

puis vérifiez le statut du PID signalé:

ps ax | grep <PID>

enfin, "commencez avec ça":

kill -QUIT <PID>
129
Austin

One-Liner pour extraire le PID du processus en utilisant le port 3000 et le tuer.

lsof -ti:3000 | xargs kill

L'option -t supprime tout sauf le PID de la sortie lsof, ce qui facilite sa suppression.

109
Zlemini

Vous pouvez utiliser lsof -i:3000.

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

89
DerMike

Dans votre .bash_profile, créez un raccourci pour terminate le processus 3000:

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

Ensuite, appelez $terminate s'il est bloqué.

53
alexzg

Pour tuer par la force un processus de ce type, utilisez la commande suivante 

lsof -n -i4TCP:3000 

Où 3000 est le numéro de port du processus en cours d'exécution

cela retourne l'identifiant du processus (PID) et lance 

kill -9 "PID"

Remplacez le PID par le numéro obtenu après l'exécution de la première commande 

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

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

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

34
Kris

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 packages javascript tiers

Sources: Tweet | github

32
Bruno Lemos

Un des moyens de tuer un processus sur un port consiste à utiliser la bibliothèque python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Une fois installé, simplement:

# 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

Exécutez en ligne de commande sur OS-X El Capitan:

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

L'option Terse de lsof ne renvoie que le PID.

26
JE42

Trouver la connexion ouverte  

lsof -i -P | grep -i "écouter"

Tuer par ID de processus

tuer -9 'PID'

22
Sourabh Bhagat

Trouvez le PID et tuez le processus.

lsof -ti:3000 | xargs kill
17
Rahul Garg

Moyens possibles pour y parvenir: 

Haut

La commande top est le moyen classique de visualiser l’utilisation des ressources de votre système et de visualiser les processus qui utilisent le plus de ressources système. Top affiche une liste de processus, ceux qui utilisent le plus de ressources CPU en haut.

ps

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

ps -A

Vous pouvez également diriger la sortie via grep pour rechercher un processus spécifique sans utiliser d’autres commandes. La commande suivante rechercherait le processus Firefox:

ps -A | grep firefox

Le moyen le plus courant de transmettre des signaux à un programme consiste à utiliser la commande kill.

kill PID_of_target_process

lsof

Liste de tous les fichiers ouverts et des processus qui les ont ouverts.

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

ou

 lsof -i tcp:3000 
13
smooth

Trouver et tuer:

Cette ligne de commande unique est simple et fonctionne correctement. 

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

La solution la plus simple : Éliminez plusieurs ports avec une seule ligne de commande.

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

lsof-t -i: 3000

82500

lsof -t -i: 3001

82499

lsof-t -i: 3001,3000

82499 82500

kill $ (lsof -t -i: 3001,3000)

Termine les processus 82499 et 82500 en une seule commande.

lsof-t -i: 3000

lsof -t -i: 3001

Vous pouvez l'utiliser dans les scripts package.json

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

11
Abhijith

En utilisant sindresorhus 's fkill tool, vous pouvez faire ceci:

$ fkill :3000
5
Kodie Grantham

Ajouter à ~/.bash_profile:

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

Puis source ~/.bash_profile et lancez

killTcpListen 8080

5
rofrol

J'ai créé une petite fonction pour cela, ajoutez-la à votre fichier rc (.bashrc, .zshrc ou autre)

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
}

alors vous pouvez simplement taper kill-by-port 3000 pour tuer votre serveur Rails (en remplaçant 3000 par le port sur lequel il est exécuté)

à défaut, vous pouvez toujours taper kill -9 $(cat tmp/pids/server.pid) à partir du répertoire racine de Rails

3
Caleb Keene

Ces deux commandes vous aideront à trouver et à tuer le processus serveur

  1. lsof -wni tcp: 3000
  2. tuer -9 pid
3
Saif chaudhry

TL; DR:

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

Si vous êtes dans une situation où des clients et des serveurs utilisent 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 afficher uniquement le pid des processus en cours d'écoute. En combinant cela avec le format abrégé -t, vous pouvez automatiquement arrêter le processus:

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

lsof -i tcp:port_number - listera le processus en cours d'exécution sur ce port

kill -9 PID - va tuer le processus

dans votre cas, ce sera

lsof -i tcp:3000 à partir de votre terminal trouver le PID du processus

kill -9 PID

1
Shan

Voici une fonction d'aide bash pour tuer plusieurs processus par leur nom ou leur 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 $2}'|\
  xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Usage:

$ fkill [process name] [process port]

Exemple:

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

Vous devriez essayer ceci, cette technique est indépendante du système d'exploitation.

Dans votre application, il existe un dossier appelé tmp, à l'intérieur de celui-ci, 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 solution de facilité. 

1
Arun P

Tu peux essayer ça

netstat -vanp tcp | grep 3000
0
Foram Thakral

Si vous voulez un moyen sans code - ouvrez le gestionnaire d'activités et forcez kill kill :)

0
Hannah Louisa Carney

Utilisez la commande suivante pour tuer le processus sur le port 3000 kill $(lsof -t -i:3000)

0
vinayb21