Alternativas mais rápidas para lsof


8

Quero extrair a identificação do processo de um determinado processo para desligá-lo. O processo é um servidor web local usando uma certa porta (localhost: 3000), e atualmente estou fazendo assim para extrair a linha relevante:

lsof|grep localhost:3000

mas o lsofcomando é muito lento. Existe uma maneira mais rápida de extrair a identificação do processo?


lsof -ilistar apenas as conexões de rede.
precisa

@HananN. Eu tentei, mas ainda é muito lento. Usar o netstat como sugerido nas respostas é muito mais rápido.
sawa

2
lsofnão é a parte lenta, usando todas as resoluções de nome e resolução de ip é. Torne tudo numérico e será rápido.
Marcin

@ Marcin Sua informação foi realmente útil, tanto quanto as respostas dadas. Obrigado.
sawa

Existe alguma razão para que você pode t use killall` pgrepou pkill?
Nils

Respostas:


7

Tente netstat, no entanto, não posso dizer se é mais rápido ou mais lento.

netstat -tanp | awk '$4 ~ /:8443$/ {sub(/\/.*/, "", $7); print $7}' | sort -u

1
Eu entendo usar a opção -p, o Linux exige que você seja usuário root.
Nikhil Mulley #

1
É definitivamente mais rápido, pois as conexões de rede netstat apenas listas (e não todos os arquivos abertos)
Matteo

Obrigado pela resposta rápida e precisa. Eu me ajudei muito.
sawa

11

Você pode colocar uma opção -n em lsof e remover a resolução DNS, o que pode acelerar a exibição


Sim, isso parece resolver o problema e é útil. Foi parcialmente sugerido por Marcin em um comentário à minha resposta.
sawa

1
o tempo relatado foi de 10 segundos, independentemente da opção n.
usar o seguinte comando

2
sudo ss -p -l '( sport = :3000 )'|awk -F"," 'NR!=1{print $2}'

Isso imprimirá o PID do processo ouvindo em 3000

time relata que isso foi concluído em 0m0.018s.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.