macos - sierra - ¿Cómo cierro un puerto abierto desde la terminal en la Mac?
ver procesos en mac terminal (8)
Abrí el puerto n. ° 5955 de una clase java para comunicarme desde un cliente. ¿Cómo cierro este puerto después de terminar? y también ¿qué comando puede mostrarme si el puerto está abierto o cerrado?
Primero averigüe el ID de Procees (pid) que ha ocupado el puerto requerido (por ejemplo, 5434)
ps aux | grep 5434
2. Matar ese proceso
kill -9 <pid>
Averigüe la ID del proceso (PID) que está ocupando el número de puerto (p. Ej., 5955) que desea liberar
sudo lsof -i :5955
Elimina el proceso que está utilizando actualmente el puerto utilizando su PID
sudo kill -9 PID
Cuando el programa que abrió el puerto sale, el puerto se cerrará automáticamente. Si matas el proceso de Java que ejecuta este servidor, eso debería hacerlo.
Listar archivos abiertos en un puerto y copiar PID
lsof -i :<port>
Mátalo con fuego :)
kill -9 <PID>
Para encontrar el proceso, intente:
sudo lsof -i :portNumber
Elimina el proceso que está utilizando actualmente el puerto utilizando su PID
kill PID
y luego verifique si el puerto se cerró. Si no, intente:
kill -9 PID
Solo haría lo siguiente si el anterior no funcionó
sudo kill -9 PID
Solo para estar seguros. De nuevo, dependiendo de cómo haya abierto el puerto, esto puede no importar.
Sin embargo, usted abrió el puerto, lo cierra de la misma manera. Por ejemplo, si creó un socket, lo vinculó al puerto 0.0.0.0:5955 y llamó a escuchar, cierre ese mismo socket.
También puedes matar el proceso que tiene el puerto abierto.
Si quieres saber qué proceso tiene un puerto abierto, prueba esto:
lsof -i :5955
Si desea saber si un puerto está abierto, puede hacer el mismo comando lsof (si algún proceso lo tiene abierto, está abierto, de lo contrario, no lo está), o simplemente puede tratar de conectarse a él, por ejemplo:
nc localhost 5955
Si vuelve inmediatamente sin salida, el puerto no está abierto.
Vale la pena mencionar que, técnicamente hablando, no es un puerto abierto, sino una combinación de host: puerto. Por ejemplo, si está conectado a una LAN como 10.0.1.2, puede vincular un socket a 127.0.0.1:5955 o 10.0.1.2:5955, sin que ninguno de los dos afecte al otro, o puede vincularse a 0.0.0.0 : 5955 para manejar ambos a la vez. Puede ver todas las direcciones IPv4 e IPv6 de su computadora con el comando ifconfig
.
También puede usar este primer comando para matar un proceso que posee un puerto en particular:
sudo netstat -ap | grep :<port_number>
Por ejemplo, supongamos que este proceso contiene el puerto 8000 TCP y luego ejecuta el comando:
sudo netstat -ap | grep :8000
dará salida a la línea correspondiente al proceso que contiene el puerto 8000 , por ejemplo:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
En este caso, procHoldingPort es el nombre del proceso que abrió el puerto, 4683 es su pid, y 8000 (tenga en cuenta que es TCP) es el número de puerto que contiene (que desea cerrar).
Luego mata el proceso, siguiendo el ejemplo anterior:
kill 4683
Como otros mencionaron aquí, si eso no funciona (puedes intentar usar kill con -9 como argumento):
kill -9 4683
De nuevo, en general, es mejor evitar enviar SIGKILL (-9) si puede.
Aclamaciones,
Chico.
Uso lsof
combinado con kill
, como se mencionó anteriormente; pero escribió un pequeño script rápido para automatizar este proceso.
Con esta secuencia de comandos, puede simplemente escribir killport 3000
desde cualquier lugar, y se eliminarán todos los procesos que se ejecutan en el puerto 3000
.