Eu precisaria de um comando de uma linha que, dado um número de porta, retornasse informações sobre o comando que iniciou o processo em execução nessa porta.
Normalmente, obtenho essas informações executando umsudo netstat
sudo netstat -antpv | grep PORT_NUMBER
que retorna o PID_NUMBER
na 4ª coluna, após o caractere da coluna ( :
), e então eu uso o PID_NUMBER
como entrada para umps aux
ps aux | grep PID_NUMBER
que retorna informações sobre o "comando de partida" na 11ª coluna.
por exemplo
# use the port number to get the process id
my_machine:~$ sudo netstat -antpv | grep 30001
tcp 0 0 0.0.0.0:30001 0.0.0.0:* LISTEN 616/python
# use the process id to get info on the command which started the process
my_machine:~$ ps aux | grep 616
my_user 616 0.8 0.5 220112 89596 ? S 01:10 6:59 /usr/bin/python my_program.py --log=INFO
É possível obter essas informações com um comando de uma linha?
por exemplo
my_machine:~$ ps aux | grep get_only_the_number_after_the_column_character_in_the_4th_column_of(sudo netstat -antpv | grep PORT_NUMBER)
/usr/bin/python my_program.py --log=INFO
Atualizar
Estou quase fazendo.
eu consigo o que eu quero com
my_machine ~$ ps aux | awk '{if ($2 == "616") print $0;}'
my_user 616 0.7 0.5 220112 89596 ? S 01:10 8:11 /usr/bin/python my_program.py --log=INFO
mas não funciona quando tento salvar o PID em uma variável bash e depois passo para o awk
my_machine:~$ mypid=$(sudo lsof -ti :30001)
my_machine:~$ echo $mypid
616
my_machine:~$ ps aux | awk '{if ($2 == "$mypid") print $0;}'
my_machine:~$
my_machine:~$ ps aux | awk -v mypid="$mypid" '{if ($2 == "mypid") print $0;}'
my_machine:~$
my_machine:~$ ps aux | awk -v mypid="616" '{if ($2 == "mypid") print $0;}'
my_machine:~$
Existem métodos de prefácio diretos mais simples para obter o PID de um processo que usa uma determinada porta ... Como, por exemplo,
lsof
quando usado com as opções-i
( que seleciona a lista de arquivos cujo endereço de Internet corresponde ao endereço especificado - por exemplo:PORT_NUMBER
) e-t
( que especifica quelsof
deve produzir uma saída concisa apenas com identificadores de processo e sem cabeçalho - por exemplo, para que a saída possa ser canalizada parakill
) assim:Isso você pode usar para alimentar o ID do processo para outro comando ... por exemplo, você pode obter o que deseja com:
Ou formate a saída como desejar, por exemplo:
Você pode ajustar ainda mais as opções para obter o que precisa ... Por favor, dê uma olhada em
man ps
.Além disso, você pode achar o
ss
comando útil ... por exemplo, você pode obter mais informações necessárias em uma etapa da seguinte forma:Você também pode ajustar as opções para obter o que precisa ... Por favor, dê uma olhada em
man ss
.