Como excluir um processo Linux por número da porta

Para matar um processo Linux, você precisa de seu ID ou nome. Se tudo o que você sabe é a porta que está usando, você ainda pode matá-la? Sim, de várias maneiras diferentes.

índice

  1. processos de abate
  2. Criando conexões com socat
  3. usando matar
  4. O comando do fusor
  5. Experimente o aparelho de fusão primeiro

processos de abate

Ocasionalmente, um processo do Linux pode parar de responder. Ele pode parar de funcionar corretamente ou pode continuar funcionando, mas ignorar solicitações de desligamento ou começar a consumir memória, CPU ou largura de banda da rede.

Quaisquer que sejam suas razões, existem maneiras de matar um processo a partir da linha de comando do Linux. O método clássico é usar o comando kill com o ID do processo que você deseja matar. O comando kill tem alguns parentes próximos. O comando pkill matará um processo pelo nome e killall matará todos os processos que encontrar que compartilham parte de um nome.

Se tudo o que você sabe sobre um processo é que ele está usando uma porta em seu computador, ainda existem maneiras de identificá-lo e eliminá-lo. Em termos de rede, "porta" pode significar uma conexão física onde você insere um cabo com um plugue na ponta, como um cabo de rede CAT5 ou 6, ou pode significar uma porta de software.

Uma porta de software é a parte final de uma conexão de rede. O endereço IP de um dispositivo identifica o computador ou outro dispositivo de rede. Os aplicativos dentro do computador usam portas diferentes. Estes fornecem outro nível de granularidade. O tráfego de rede chegou ao computador correto usando o endereço IP e usando o encaminhamento de porta pode ser enviado para o aplicativo correto.

É como o correio postal que chega a um hotel, é então classificado e entregue nos quartos apropriados. O endereço IP é como o endereço do hotel e os números dos quartos são como os números das portas.

Se você vir atividade de rede em uma porta e não reconhecer o processo que a está gerando, ou se seu comportamento for problemático ou suspeito, convém encerrar o processo. Mesmo que tudo o que você saiba seja o número da porta, você ainda poderá rastrear o processo e eliminá-lo.

Criando conexões com socat

Para que tenhamos algumas conexões para matar, usaremos o socat para criar conexões de rede usando diferentes protocolos. Você terá que instalar socat . Para instalá-lo no Ubuntu, use este comando:

 sudo apt instalar socat

Sobre o uso do Fedora dnf :

 sudo dnf instalar socat

Em Manjaro você precisa escrever:

 sudo pacman -S socat

A sintaxe para socat é simples, embora um pouco detalhada. Precisamos fornecer os endereços de origem e destino. Para cada um deles, devemos fornecer o protocolo, o endereço IP e o número da porta. Podemos substituir STDIN ou STDOUT como origem ou destino.

Este comando cria uma conexão entre um soquete TCP de escuta na porta 7889, no endereço IP de loopback de 127.0.0.1 e STDOUT. O sinal " & " executa o comando em segundo plano, portanto, mantemos o acesso à linha de comando.

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

Criaremos mais duas conexões para ter uma pequena seleção de soquetes que usam protocolos diferentes. Vamos criar uma conexão UDP e uma conexão SCTP. A única parte do comando que muda é o protocolo.

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

usando matar

Claro, podemos usar kill para matar o processo, desde que saibamos qual é o ID do processo. Para encontrar o PID, podemos usar o domínio lsof .

Para listar os detalhes do processo na porta 7889 que usa o protocolo TCP, usamos o -i (endereço da Internet), assim.

 lsof -i tcp:7889

O PID deste processo é 3141, e podemos usá-lo com kill :

 sudo matar 3141

Podemos poupar algum esforço se usarmos cachimbos. Se canalizarmos a saída de lsof para awk e dissermos awk para procurar linhas contendo a porta de interesse, 7889, e imprimir o segundo campo nessa linha, isolamos o PID.

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

Assim, podemos canalizar a saída do awk para o comando kill usando xargs . O comando xargs pega sua entrada canalizada e a passa para outro comando como parâmetros de linha de comando. usaremos xargs com o domínio kill .

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

Não recebemos nenhum feedback visual. Na moda típica do Linux, nenhuma notícia é uma boa notícia. Se você quiser verificar se o processo foi concluído, você pode usar lsof mais uma vez.

 lsof -i tcp:7889 

Como lsof não relata nada, sabemos que não existe essa conexão.

Podemos matar um processo usando o protocolo UDP simplesmente substituindo "tcp" por "udp" em nosso comando acima.

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

No entanto, lsof não reconhece o protocolo SCTP.

 lsof -i sctp:7889 

Podemos usar o comando ss para fazer isso. estamos usando o -S (SCTP) para procurar soquetes SCTP, o -a (todos) para procurar todos os tipos de soquetes (escutando, aceitando, conectado, etc.), e a opção -p (processos) para listar os detalhes do socket.processo usando o socket.

 ss-sap

Podemos analisar essa saída usando grep e awk . Também podemos analisá-lo usando grep e algumas expressões regulares PERL, mas é muito mais fácil de entender dessa maneira. Se eu fosse usar isso mais de uma ou duas vezes, provavelmente faria um alias ou uma função de shell.

Encaminharemos a saída de ss para grep e procuraremos nosso número de porta, 7889. Encaminharemos a saída de grep para awk . No awk estamos usando a opção -F (separador de strings) para definir uma vírgula " , " como delimitador de campo. Procuramos uma string que contenha Pid =" e imprimimos o segundo campo delimitado por vírgulas dessa string.

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

Isso nos deu a string "pid = 2859".

Podemos canalizar isso para o awk novamente, definir o delimitador de campo para o sinal de igual " = e imprimir o segundo campo dessa string, que será o texto após o sinal de igual.

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

Agora isolamos o ID do processo. Podemos usar xargs para passar o PID para kill como um parâmetro de linha de comando.

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

Isso mata o processo que estava usando o soquete do protocolo SCTP na porta 7889.

O comando do fusor

O comando fuser simplifica muito as coisas. A desvantagem é que ele só funciona com soquetes TCP e UDP. No lado positivo, esses são os dois tipos mais comuns de plugues com os quais você terá que lidar. O comando fuser já estava instalado nos computadores Ubuntu, Fedora e Manjaro que verificamos.

Tudo o que você precisa fazer é usar o comando -k (kill) e fornecer a porta e o protocolo. Você pode usar o -n (namespace) e fornecer o protocolo e a porta, ou usar o "formato de atalho de barra" e colocar o número da porta primeiro.

 fusor -n tcp 7889
 fusor 7889/udp

O número da porta, protocolo e PID do processo finalizado são impressos na janela do terminal.

Experimente o aparelho de fusão primeiro

Ele provavelmente será instalado no computador em que você está trabalhando e o protocolo provavelmente será TCP ou UDP, então há uma boa chance de que a maneira mais simples funcione para você.

  • Como usar a função IMAGEM no Microsoft Excel
  • O material está finalmente aqui para corrigir seus problemas de casa inteligente

descubra mais conteúdo

Você pode ocultar um amigo de outro amigo no Facebook?

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Ir arriba