Баш | Сбой цикла уничтожения портов

[117172]В Unixland способ редактирования больших файлов в основном заключается в редактировании их по потоку, например, с помощью [117506]sed(1)[117507]. [117508]Cygwin[117509] предоставляет Unix-подобное окружение под Windows, включая [117510]sed(1)[117511].[117173].
2
20.05.2015, 20:47
3 ответа

Решение есть благодаря комментарию @ 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[@]};
2
27.01.2020, 22:21
kill-ports() {
   for port in "$@"; do fuser -n tcp "$port" -k -TERM; done
}

(Вы абсолютно не нуждаетесь в цитатах в этом случае, но всегда приятно использовать их, или иначе вы будете жалуться / редактировать от людей.)

2
27.01.2020, 22:21

Попробуйте добавить -9 для убийства

lsof -i tcp:"$1" | awk 'NR!=1 {print $2}' | xargs kill -9;
-3
27.01.2020, 22:21

Теги

Похожие вопросы