Comment fermer un port ouvert du terminal sur le Mac?
197
J'ai ouvert le port # 5955 d'une classe java pour communiquer avec un client. Comment fermer ce port après avoir terminé? et aussi quelle commande peut me montrer si le port est ouvert ou fermé?
L'envoi de -9 ne devrait pas être la première tentative de tuer un processus, et c'est une très mauvaise habitude. Si je me souviens bien, vous devez d'abord utiliser kill PID(ce qui implique -15), puis essayer -2 et -1. -9 n'est le dernier recours que si toutes les autres options ne fonctionnent pas.
Meow
3
a tué le pID sans aucun indicateur comme suggéré par @Meow et cela a fonctionné pour moi
Toni Leigh
39
Pour trouver le processus, essayez:
sudo lsof -i :portNumber
Tuez le processus qui utilise actuellement le port en utilisant son PID
kill PID
puis vérifiez si le port est fermé. Sinon, essayez:
kill -9 PID
Je ne ferais ce qui suit que si le précédent ne fonctionnait pas
sudo kill -9 PID
Juste pour être sûr. Selon la façon dont vous avez ouvert le port, cela peut ne pas avoir d'importance.
Quelle que soit la façon dont vous avez ouvert le port, vous le fermez de la même manière. Par exemple, si vous avez créé un socket, que vous l'avez lié au port 0.0.0.0:5955 et que vous avez appelé écouter, fermez ce même socket.
Vous pouvez également simplement tuer le processus qui a le port ouvert.
Si vous voulez savoir quel processus a un port ouvert, essayez ceci:
lsof -i :5955
Si vous voulez savoir si un port est ouvert, vous pouvez faire la même commande lsof (si un processus l'a ouvert, il est ouvert; sinon, ce n'est pas le cas), ou vous pouvez simplement essayer de vous y connecter, par exemple:
nc localhost 5955
S'il revient immédiatement sans sortie, le port n'est pas ouvert.
Il peut être utile de mentionner que, techniquement parlant, ce n'est pas un port ouvert, mais une combinaison hôte: port. Par exemple, si vous êtes connecté à un réseau local en tant que 10.0.1.2, vous pouvez lier un socket à 127.0.0.1.1:5955 ou 10.0.1.2:5955, sans que l'un n'affecte l'autre, ou vous pouvez vous lier à 0.0.0.0 : 5955 pour gérer les deux à la fois. Vous pouvez voir toutes les adresses IPv4 et IPv6 de votre ordinateur avec la ifconfigcommande.
Vous pouvez également utiliser cette première commande pour tuer un processus qui possède un port particulier:
sudo netstat -ap | grep :<port_number>
Par exemple, supposons que ce processus contienne le port 8000 TCP, puis exécutez la commande:
sudo netstat -ap | grep :8000
affichera la ligne correspondant au processus contenant le port 8000 , par exemple:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
Dans ce cas, procHoldingPort est le nom du processus qui a ouvert le port, 4683 est son pid et 8000 (notez qu'il s'agit de TCP) est le numéro de port qu'il contient (que vous souhaitez fermer).
Tuez ensuite le processus, en suivant l'exemple ci-dessus:
kill 4683
Comme d'autres l'ont mentionné ici, si cela ne fonctionne pas (vous pouvez essayer d'utiliser kill avec -9 comme argument):
kill -9 4683
Encore une fois, en général, il vaut mieux éviter d'envoyer SIGKILL (-9) si vous le pouvez.
Tu m'as sauvé la journée. Pour une raison quelconque, lsofen combinaison avec killn'a rien retourné et a fait accrocher mon script sur macOS Sierra. Mais killportfonctionne comme un charme et est plus rapide. Merci!
wout
4
J'ai créé une fonction à cet effet.
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
Copier et coller ce bloc de code dans votre terminal devrait libérer le port souhaité. N'oubliez pas de changer le numéro de port à la dernière ligne.
Lorsque le programme qui a ouvert le port se ferme, le port se ferme automatiquement. Si vous tuez le processus Java exécutant ce serveur, cela devrait le faire.
Réponses:
Découvrez l'ID de processus (PID) qui occupe le numéro de port (par exemple, 5955) que vous souhaitez libérer
Tuez le processus qui utilise actuellement le port en utilisant son PID
la source
kill PID
(ce qui implique -15), puis essayer -2 et -1. -9 n'est le dernier recours que si toutes les autres options ne fonctionnent pas.Pour trouver le processus, essayez:
Tuez le processus qui utilise actuellement le port en utilisant son PID
puis vérifiez si le port est fermé. Sinon, essayez:
Je ne ferais ce qui suit que si le précédent ne fonctionnait pas
Juste pour être sûr. Selon la façon dont vous avez ouvert le port, cela peut ne pas avoir d'importance.
la source
Quelle que soit la façon dont vous avez ouvert le port, vous le fermez de la même manière. Par exemple, si vous avez créé un socket, que vous l'avez lié au port 0.0.0.0:5955 et que vous avez appelé écouter, fermez ce même socket.
Vous pouvez également simplement tuer le processus qui a le port ouvert.
Si vous voulez savoir quel processus a un port ouvert, essayez ceci:
Si vous voulez savoir si un port est ouvert, vous pouvez faire la même commande lsof (si un processus l'a ouvert, il est ouvert; sinon, ce n'est pas le cas), ou vous pouvez simplement essayer de vous y connecter, par exemple:
S'il revient immédiatement sans sortie, le port n'est pas ouvert.
Il peut être utile de mentionner que, techniquement parlant, ce n'est pas un port ouvert, mais une combinaison hôte: port. Par exemple, si vous êtes connecté à un réseau local en tant que 10.0.1.2, vous pouvez lier un socket à 127.0.0.1.1:5955 ou 10.0.1.2:5955, sans que l'un n'affecte l'autre, ou vous pouvez vous lier à 0.0.0.0 : 5955 pour gérer les deux à la fois. Vous pouvez voir toutes les adresses IPv4 et IPv6 de votre ordinateur avec la
ifconfig
commande.la source
port de recherche très simple 5900:
considérant alors 59553 comme PID
la source
En 2018, voici ce qui a fonctionné pour moi avec MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
puis:
sudo kill -9 yourPIDnumber
la source
lsof -nPi
est légèrement meilleur car le numéro de port est réellement visible dans la sortie et vous obtenez une meilleure idée de ce que vous tuez.sudo lsof -nPi | grep LISTEN
Un liner est le meilleur
Exemple: sur mac, je voulais effacer le port 9604. La commande suivante fonctionnait comme un charme
la source
Vous pouvez également utiliser cette première commande pour tuer un processus qui possède un port particulier:
Par exemple, supposons que ce processus contienne le port 8000 TCP, puis exécutez la commande:
affichera la ligne correspondant au processus contenant le port 8000 , par exemple:
Dans ce cas, procHoldingPort est le nom du processus qui a ouvert le port, 4683 est son pid et 8000 (notez qu'il s'agit de TCP) est le numéro de port qu'il contient (que vous souhaitez fermer).
Tuez ensuite le processus, en suivant l'exemple ci-dessus:
Comme d'autres l'ont mentionné ici, si cela ne fonctionne pas (vous pouvez essayer d'utiliser kill avec -9 comme argument):
Encore une fois, en général, il vaut mieux éviter d'envoyer SIGKILL (-9) si vous le pouvez.
À votre santé,
Gars.
la source
J'utilise
lsof
combiné aveckill
, comme mentionné ci-dessus; mais a écrit un petit script bash rapide pour automatiser ce processus.Avec ce script, vous pouvez simplement taper
killport 3000
de n'importe où, et il tuera tous les processus en cours d'exécution sur le port3000
.https://github.com/xtrasimplicity/killport
la source
lsof
en combinaison aveckill
n'a rien retourné et a fait accrocher mon script sur macOS Sierra. Maiskillport
fonctionne comme un charme et est plus rapide. Merci!J'ai créé une fonction à cet effet.
Copier et coller ce bloc de code dans votre terminal devrait libérer le port souhaité. N'oubliez pas de changer le numéro de port à la dernière ligne.
la source
essayez ci-dessous, en supposant que le port en cours d'exécution est
8000
:J'ai trouvé la référence ici
la source
Lorsque le programme qui a ouvert le port se ferme, le port se ferme automatiquement. Si vous tuez le processus Java exécutant ce serveur, cela devrait le faire.
la source
Identifiez d'abord l'identifiant Procees (pid) qui a occupé le port requis (par exemple 5434).
ps aux | grep 5434
2. tuer ce processus
la source