Veja o que funcionou para mim:
#!/bin/bash
PID_NUMBER=$(netstat -a -n -b -o | grep $1 | sed -e "s/[[:space:]]\+/ /g" | cut -d ' ' -f6 | head -1)
echo "$PID_NUMBER"
taskkill /F /PID "$PID_NUMBER"
Observação1: precisei substituir -f5
por -f6
porque, do contrário, eu obteria uma coluna diferente.
Observação2: taskkill
falharia com ERROR: Invalid query
quando mais de um pid
foi retornado. Resolvido adicionando | head -1
.
Conclusão1: tenha em atenção que a sua solução não é robusta: uma vez que netstat
pode produzir, p. ex. LISTENING
antes do pid
você não pode dividir confiavelmente como você fez.
Conclusão2: Você deve sempre passar um único valor para taskkill
, não uma string multilinha.
Sugestão: diferencie por UDP
e TCP
, pois TCP
conexões têm uma coluna STATUS
:
PID_NUMBER=$(netstat -a -n -o | grep :$1 | awk '/UDP/{a=$4} /TCP/{a=$5} END{print a}')