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?

sawa
fonte
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
Nikhil Mulley
fonte
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

Dom
fonte
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.

Jodie C
fonte