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.