команда linux для уничтожения процесса в работающем порту [закрыто]

У меня есть однострочный псевдоним, который я добавил в свой .bash_profile , чтобы убить процесс, запущенный в 8080

alias kill8080 = "kill -9 $ (lsof -n -i: 8080 | grep LISTEN | awk '{print $ 2} ') "'

, когда я выполняю kill8080 , я получаю

-bash: kill: (36404) - Нет такого процесса

, но когда я выполняю

lsof -n -i: 8080 | grep LISTEN | awk '{print $ 2}' 89912

затем kill -9 88912 , завершает процесс

что не так с однострочником?

кстати , Это в Mac OS X

-1
задан 16 July 2018 в 10:40

1 ответ

Псевдоним не может работать правильно, поскольку этот оператор является executely во время создания псевдонима а не в течение времени выполнения.

lsof -n -i:8080 | grep LISTEN | awk '{print $2}'

Таким образом, Ваш псевдоним только уничтожит этот процесс, которые открывают порт 8080 в то время, когда Вы создаете псевдоним и не при использовании псевдонима. Число процесса, созданное для псевдонима, будет статично, если Вы не воссоздадите свой псевдоним, создают оператор каждый раз прежде, чем выполнить его. Таким образом, Вы тестируете это путем выполнения:

alias test1="echo $(lsof -n -i:8080 | grep LISTEN | awk '{print $2}')"

Псевдоним test1 будет всегда повторять то же число процесса, даже если Вы вручную уничтожите процесс и перезапустите другой процесс для порта 8080. Так единственный способ действительно сделать это к сценарию удара, чтобы сделать это вместо того, чтобы использовать псевдонимы.

Также обратите внимание, что шаг также не будет работать, если подпроцессы будут возвращены для lsof в Ubuntu, но я предполагаю дело обстоит не так в OSX, но просто знать об этом. Для нескольких процессов необходимо будет использовать цикл для уничтожения каждого, но игнорирующий любую ошибку, поскольку уничтожение основного процесса могло уничтожить любые подпроцессы также.

Отредактированный: можно сделать это с одним лайнером в ударе, не как псевдоним. Это будет работать, даже если будут возвращены несколько чисел процесса.

for p in `sudo lsof -n -i:8080 | grep LISTEN | awk '{print $2}'`; do sudo kill -9 $p; done

PS: можно проверить все псевдонимы путем ввода alias в командной строке. Это - быстрый способ проверить то, что на самом деле создается.

3
ответ дан 28 October 2019 в 08:21

Другие вопросы по тегам:

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