Kill processo na porta específica

1

Já foi perguntado antes, mas como fazê-lo com o OpenBSD? Eu tentei algum método diferente, mas nenhum funcionou.

$ sudo fuser -k 80/tcp
fuser: 80/tcp: No such file or directory
$ kill $(sudo lsof -t -i:80)  
sudo: lsof: command not found
usage: kill [-s signame | -signum | -signame] { job | pid | pgrp } ...
       kill -l [exit_status ...]
$ 
    
por Niklas Rosencrantz 02.12.2015 / 17:07

1 resposta

3

Dê uma olhada em fstat e lsof de ports / packages .

Instalando o lsof (PKG_PATH depende da sua versão do SO):

$ su - root -c \
    "PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.8/packages/amd64 pkg_add -r lsof"
lsof-4.88: ok

Usando fstat :

# Start a process (nc) that listens on port 8080
$ nc -l 8080 & bg
[1] 17454
[1] nc -l 8080

# Get the process listening on port 8080:
$ fstat | grep :8080
cmihai   nc         17454    3* internet stream tcp 0x0 *:8080

Podemos criar uma função para obter o pid, assim:

$ portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
$ portpid 8080
17454

Então, podemos matar um processo escutando na porta 8080, assim:

$ kill $(portpid 8080)
[1] + Terminated           nc -l 8080

Aviso:

  • NÃO há tratamento de erros nem nada neste exemplo - e não fiz nenhum tipo de teste além do exemplo listado aqui. Teste você mesmo e adicione algum tratamento de erros a essa função para evitar a morte de outro processo por engano.

Referência:

por 02.12.2015 / 17:22