У меня есть однострочный псевдоним, который я добавил в свой .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
Псевдоним не может работать правильно, поскольку этот оператор является 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
в командной строке. Это - быстрый способ проверить то, что на самом деле создается.