Cómo matar un proceso de Linux por número de puerto

Cómo matar un proceso de Linux por número de puerto

Para eliminar un proceso de Linux, necesita su ID o nombre. Si todo lo que sabe es el puerto que está usando, ¿puede matarlo? Sí, de varias maneras diferentes.

Procesos de matanza

A veces, un proceso de Linux puede dejar de responder. Puede dejar de funcionar correctamente o continuar funcionando pero ignorar las solicitudes para apagarlo o comenzar a consumir memoria, CPU o ancho de banda de red.

Sean cuales sean sus motivos, hay formas de eliminar un proceso desde la línea de comandos de Linux. El método clásico es usar el comando de eliminación con la identificación del proceso que desea eliminar. El killequipo tiene varios parientes cercanos. El comando pkilleliminará el proceso por nombre y killalleliminará cualquier proceso que pueda encontrar que comparta parte del nombre.

Si todo lo que sabe acerca de un proceso es que está usando un puerto en su computadora, todavía hay formas de identificarlo y eliminarlo. En términos de red, «puerto» puede significar una conexión física en la que conecta un cable con un enchufe en el extremo, como un cable de red CAT5 o 6 , o puede significar un puerto de software.

El puerto de software es la parte final de la conexión de red. La dirección IP del dispositivo identifica una computadora u otro dispositivo de red. Las aplicaciones dentro de una computadora usan diferentes puertos. Proporcionan un nivel diferente de detalle. El tráfico de red llegó a la computadora correcta usando una dirección IP y, con el direccionamiento de puertos, se puede enviar a la aplicación correcta.

Esto es similar a cómo llega el correo postal a un hotel, luego se clasifica y se entrega en las habitaciones correspondientes. Una dirección IP es como la dirección de una calle de hotel y los números de habitación son como números de puerto.

Si ve actividad de red en un puerto y no reconoce el proceso que lo está creando, o si su comportamiento está causando problemas o sospechas, es posible que desee eliminar ese proceso. Incluso si todo lo que sabe es el número de puerto, puede rastrear el proceso y eliminarlo.

Haciendo conexiones con socat

Para que podamos tener múltiples conexiones para matar, usaremos socatpara crear conexiones de red usando diferentes protocolos. Necesitarás instalar socat. Para instalarlo en Ubuntu, use este comando:

sudo apt install socat

Instalación de socket en Ubuntu

Sobre el uso de Fedora dnf:

sudo dnf install socat

Instalación de socket en Fedora

En Manjaro necesitas escribir:

sudo pacman -S socat

Instalando jugo en Manjaro

La sintaxis socates simple, aunque un poco detallada. Necesitamos especificar las direcciones de origen y destino. Para cada uno de ellos, debemos especificar el protocolo, la dirección IP y el número de puerto. Podemos reemplazar STDIN o STDOUT como fuente o destino.

Este comando crea una conexión entre un socket de escucha TCP en el puerto 7889, una dirección IP de loopback de 127.0.0.1 y STDOUT. El signo » &» ejecuta el comando en segundo plano, por lo que conservamos el acceso a la línea de comandos.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

Creación de una conexión de socket TCP de escucha con socat

Crearemos dos conexiones más para que tengamos una pequeña selección de sockets usando diferentes protocolos. Crearemos una conexión UDP y una conexión SCTP . La única parte del comando que cambia es el protocolo.

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

Creación de conexiones de escucha de socket UDP y SCTP con socat

uso de asesinato

Por supuesto, podemos usar killpara terminar un proceso si conocemos la identificación del proceso. Para encontrar el PID podemos usar lsofel comando.

Para enumerar los detalles del proceso en el puerto 7889, que usa el protocolo TCP, usamos la -iopción (dirección de Internet), como se muestra aquí.

lsof -i tcp:7889

Usar lsof para mostrar detalles de un proceso usando un puerto y protocolo específicos.

El PID de este proceso es 3141 y podemos usarlo con kill:

sudo kill 3141

Podemos ahorrar algo de esfuerzo si usamos tuberías. Si dirigimos la salida lsofa un awkcomando awkpara buscar líneas que contengan el puerto que nos interesa, 7889, e imprimimos el segundo campo de esta línea, aislamos el PID.

lsof -i tcp:7889 | awk '/7889/{print $2}'

Canalice la salida de lsof a awk

Luego podemos canalizar la salida awkal killcomando usando xargs. Un comando xargstoma la entrada a través de una canalización y la pasa a otro comando como parámetros de línea de comandos. Usaremos xargscon killel equipo.

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

Uso de tuberías para canalizar la salida de lsof a awk y de awk a xargs y matar

No recibimos ningún comentario visual. Al estilo típico de Linux, ninguna noticia es una buena noticia. Si desea asegurarse de que el proceso se completó, puede lsofvolver a utilizarlo.

lsof -i tcp:7889

Usar lsof para buscar detalles del proceso usando un puerto y protocolo específicos sin éxito

Como lsofno informa nada, sabemos que no existe tal conexión.

Podemos eliminar un proceso usando el protocolo UDP simplemente reemplazando «tcp» con «udp» en nuestro comando anterior.

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

Uso de tuberías para canalizar la salida de lsof a awk y de awk a xargs y matar para el zócalo UDP

Sin embargo, lsofno reconoce el protocolo SCTP.

lsof -i sctp:7889

lsof no funciona con el protocolo SCTP

Podemos usar un sscomando para hacer esto. Usamos la -Sopción (SCTP) para buscar sockets SCTP, la -aopción (all) para buscar todos los tipos de sockets (escuchando, recibiendo, conectados, etc.) y la -popción (processes) para listar información sobre el proceso usando el enchufe.

ss -Sap

Imprima los detalles del proceso usando el socket SCTP con ss

Podemos analizar esta salida usando grepy awk. También podríamos analizarlo con grepalgunas expresiones regulares de PERL, pero de esta manera es mucho más fácil de entender. Si fuera a usar esto más de una o dos veces, probablemente lo convertiría en un alias o una función de shell.

Enviaremos la salida de ssa grepy buscaremos nuestro número de puerto, 7889. Enviaremos la salida de grepa awk. En awk, usamos -Fla opción (separator string) para establecer una coma » ,» como separador de campo. Buscamos una línea que contenga «pid=» e imprimimos el segundo campo delimitado por comas de esa línea.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'

Uso de tuberías para conectar ss, grep y awk para extraer la cadena PID

Esto nos dio la cadena «pid=2859».

Podemos pasar eso awknuevamente, establecer el separador de campo en el signo igual » =» e imprimir el segundo campo de esa línea, que será el texto detrás del signo igual.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

Uso de tuberías para conectar ss, grep y awk dos veces para extraer PID

Ahora hemos aislado el ID del proceso. Podemos usar xargspara pasar el PID como killun parámetro de línea de comando.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

Uso de canalizaciones con ss, grep, awk y xargs para finalizar un proceso de socket SCTP

Esto elimina el proceso que estaba usando el socket del protocolo SCTP en el puerto 7889.

Equipo fusor

El comando fusersimplifica enormemente el trabajo. La desventaja es que solo funciona con sockets TCP y UDP. En el lado positivo, estos son los dos tipos de enchufes más comunes con los que tendrá que lidiar. El comando fuserya se instaló en las máquinas Ubuntu, Fedora y Manjaro que probamos.

Todo lo que tiene que hacer es usar la -kopción (matar) y especificar el puerto y el protocolo. Puede usar -nla opción (espacio de nombres) y especificar el protocolo y el puerto, o usar el «formato de etiqueta de barra inclinada» y especificar primero el número de puerto.

fuser -n tcp 7889 fuser 7889/udp

Usando el comando fuser para matar procesos usando sockets TCP y UDP

El número de puerto, el protocolo y el PID del proceso completado se imprimen en la ventana del terminal.

Prueba el fusor primero

Lo más probable es que esté instalado en la computadora en la que está trabajando, y el protocolo probablemente sea TCP o UDP, por lo que es muy probable que la forma más fácil funcione para usted.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *