Existe uma solução, graças ao comentário @ StéphaneChazelas:
"Basta fazer:
lsof -ti "tcp:$1" | xargs -r kill
,
é para isso que-t
é% (e -r
diz que xargs não executa o comando se não houver argumentos. Isso é para GNU xargs. Algumas outras implementações como FreeBSD faz isso automaticamente) "
No final, parece que isso e também funcionam (algumas de limpeza também):
#!/bin/bash
port_array=( 5057 5061 5056 );
kill-ports() {
for port in "$@";
do
kill-port "$port";
done
};
kill-port () {
lsof -ti "tcp:$1" | xargs -r kill;
}
kill-ports ${port_array[@]};
EDITAR:
@ A solução do PSkocik foi postada após o comentário do @StéphaneChazelas, mas funciona bem também:
#!/bin/bash
port_array=( 5057 5061 5056 );
kill-ports() {
for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}
kill-ports ${port_array[@]};