web-dev-qa-db-fra.com

Comment fermer un port ouvert du terminal sur le Mac?

J'ai ouvert le port n ° 5955 d'une classe Java pour communiquer à partir d'un client. Comment puis-je fermer ce port après avoir terminé? et aussi quelle commande peut me montrer si le port est ouvert ou fermé?

138
user1667108
  1. Identifiez l'ID de processus (PID) occupant le numéro de port (par exemple, 5955) que vous souhaitez libérer.

    Sudo lsof -i :5955
    
  2. Kill le processus qui utilise actuellement le port en utilisant son PID

    Sudo kill -9 PID
    
294
Future2020

Pour trouver le processus, essayez:

Sudo lsof -i :portNumber

Kill le processus qui utilise actuellement le port en utilisant son PID

kill PID

puis vérifiez si le port est fermé. Si non, essayez:

kill -9 PID

Je ne ferais que si le précédent ne fonctionnait pas

Sudo kill -9 PID

Juste pour être sûr. Encore une fois, cela dépend de la manière dont vous avez ouvert le port. 

23
oeste

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 lié au port 0.0.0.0:5955 et appelé listen, 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 exécuter 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 retourne immédiatement sans sortie, le port n'est pas ouvert.

Il peut être intéressant de noter que, techniquement, 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:5955 ou 10.0.1.2:595, sans que l'un des deux affecte l'autre, ou vous pouvez associer à 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 commande ifconfig.

23
abarnert

Vous pouvez également utiliser cette première commande pour tuer un processus possédant un port particulier:

Sudo netstat -ap | grep :<port_number>

Par exemple, supposons que ce processus conserve le port8000TCP, puis que la commande suivante soit exécutée:

Sudo netstat -ap | grep :8000

affichera la ligne correspondant au port de traitement8000, par exemple:

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

Dans ce cas,procHoldingPortest le nom du processus qui a ouvert le port,4683est son pid et8000(notez que c'est TCP) est le numéro de port qu'il détient (que vous souhaitez fermer).

Ensuite, tuez le processus en suivant l'exemple ci-dessus:

kill  4683

Comme cela a déjà été mentionné, 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.

À votre santé,

Gars.

5
Guy Avraham

J'utilise lsof combiné avec kill, comme mentionné ci-dessus; mais a écrit un petit script rapide pour automatiser ce processus.

Avec ce script, vous pouvez simplement taper killport 3000 de n'importe où, et tous les processus exécutés sur le port 3000 seront supprimés.

https://github.com/xtrasimplicity/killport

5
XtraSimplicity

très simple trouver le port 5900: 

Sudo lsof -i :5900

puis en considérant 59553 comme PID

Sudo kill 59553
4
flik

Lorsque le programme qui a ouvert le port se ferme, le port sera automatiquement fermé. Si vous supprimez le processus Java exécutant ce serveur, vous devriez le faire.

1
Barmar

essayez ci-dessous, en supposant que le port en cours d'exécution est 8000:

free-port() { kill "$(lsof -t -i :8000)"; }

J'ai trouvé la référence ici

1
Hasan A Yousef

J'ai créé une fonction à cette fin.

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-coller ce bloc de code dans votre terminal devrait libérer le port souhaité. N'oubliez pas de changer le numéro de port dans la dernière ligne.

1
Md. Khairul Islam

En 2018, voici ce qui a fonctionné pour moi avec MacOS HighSierra: 

Sudo lsof -nPi: votre numéro de port

puis:

Sudo kill -9 votre numéroPID 

0
Gel Sisaed