Решение есть благодаря комментарию @ StéphaneChazelas:
"Просто сделайте:
lsof -ti" tcp: $ 1 "| xargs -r kill
,
для этого используется -t
(и -r
указывает xargs не запускать команду, если аргумента нет. Это для GNU ] xargs. Некоторые другие реализации, такие как FreeBSD , делают это автоматически) "
В конце концов это выглядит так, и также работает (Небольшая очистка мной тоже):
#!/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[@]};
EDIT:
Решение @ PSkocik было опубликовано после комментария @ StéphaneChazelas, но тоже отлично работает:
#!/bin/bash
port_array=( 5057 5061 5056 );
kill-ports() {
for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}
kill-ports ${port_array[@]};
kill-ports() {
for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}
(Вы абсолютно не нуждаетесь в цитатах в этом случае, но всегда приятно использовать их, или иначе вы будете жалуться / редактировать от людей.)
Попробуйте добавить -9 для убийства
lsof -i tcp:"$1" | awk 'NR!=1 {print $2}' | xargs kill -9;