En Linux, los procesos y los puertos tienen una relación simbiótica. Uno no puede existir ni funcionar sin el otro. Los procesos tienden a compartir puertos y algunos procesos dependen de un puerto específico para cumplir con un objetivo del sistema operativo.
Esta guía de artículo le brinda un tutorial sobre cómo liberar un puerto utilizado por un proceso para usarlo en otro proceso.
Cómo listar un puerto con su proceso asociado
Si puede enumerar un puerto objetivo y un proceso PID , puede matar el proceso asociado con él. Hay varias herramientas que puede usar para enumerar los puertos utilizados activamente en Linux.
Una recomendación o enfoque más flexible es a través del comando de estadísticas de red (netstat) o comando ss (más rápido que netstat ). Es una instalación predeterminada en la mayoría de las distribuciones de Linux, pero puede instalarla con el siguiente comando si no está presente.
Instalar Netstat y Comando SS en Linux
$ sudo apt-get install net-tools iproute [On Debian/Ubuntu & Mint] $ sudo dnf install net-tools iproute [On CentOS/RHEL/Fedora and Rocky Linux/AlmaLinux] $ pacman -S netstat-nat iproute [On Arch Linux] $ emerge sys-apps/net-tools iproute [On Gentoo] $ sudo dnf install net-tools iproute [On Fedora] $ sudo zypper install net-tools iproute [On openSUSE]
Para enumerar un puerto y averiguar si está bloqueado para un proceso o servicio en particular, siga la siguiente regla de sintaxis.
$ sudo netstat -ltnp | grep -w ':[targeted_port]' OR $ ss -ltnp | grep -w ':[targeted_port]'
Por ejemplo, procesos o servicios escuchando el puerto 80 se pueden enumerar de la siguiente manera.
$ sudo netstat -ltnp | grep -w ':80' OR $ ss -ltnp | grep -w ':80'
Bajo la cadena de comando “netstat -ltnp ”, la opción -p
apunta a 1520 que es el PID del proceso que desea eliminar. Toma nota de ello.
Cómo crear un proceso ficticio en Linux
Para no interferir con el ecosistema de su sistema operativo Linux, crearemos algunos procesos ficticios y los utilizaremos para demostrar el objetivo de este artículo. Usaremos el “socat ” utilidad de línea de comandos para crear nuestros procesos de demostración.
Tengamos tres procesos bajo SCTP , TCP y UDP protocolos respectivamente. Vamos a vincular estos nuevos procesos a un puerto aleatorio como 9999 .
El siguiente comando generará un proceso temporal con un PID (ID de proceso ) de 8695 .
$ socat sctp-listen:9999,bind=127.0.0.1 stdout &
El siguiente comando generará un proceso temporal con un PID (ID de proceso) de 9080 .
$ socat tcp-listen:9999,bind=127.0.0.1 stdout &
El siguiente comando generará un proceso temporal con un PID (ID de proceso) de 9270 .
$ socat udp-listen:9999,bind=127.0.0.1 stdout &
Cómo Matar un Proceso con su PID (Process ID)
Usando el "kill -9"
comando, podemos deshacernos de un proceso que tiene como rehén un número de puerto que queremos usar en otro proceso priorizado. En este caso, creamos tres procesos con PIDs 8695 ,
Para matar el proceso bajo PID 8695 , ejecuté el siguiente comando:
$ kill -9 8695
Incluso podemos eliminar más de un proceso a la vez. Para matar los procesos creados con PIDs 9080 y 9270 , use un comando similar a este:
$ kill -9 9080 9270
Ya sea que esté eliminando un proceso o más de un proceso al mismo tiempo, la ejecución del comando de eliminación debería conducir a una instancia de terminal vacía como se muestra arriba.
Para confirmar que los procesos ya no están activos, intentaremos volver a ejecutar el comando kill :
$ kill -9 8695
Un mensaje de error indicará que el proceso ya no está activo. Además, los dos procesos recientemente eliminados [2] 9080 y [3] 9270 se muestran como ya no activos.
Nota final
Las reglas para matar un proceso en ejecución son simples. Primero, identifique el puerto que desea usar a través del “netstat ” o “ss” comando y luego tome nota del PID adjunto al proceso. Finalmente, usa el “kill -9” comando junto con el PID identificado para deshacerse de ese proceso.