Как написать shscript, чтобы убить -9 pid, который найден через lsof -i

Я думаю, что это известная ошибка в пакете сетевого менеджера и была исправлена ​​в версии 0.9.2. Патч еще нет (декабрь 2011 г.), интегрированный в репозитории mainline.

1
задан 17 September 2013 в 02:13

5 ответов

lsof -i tcp:8080 производит вывод, затем | egrep -v "COMMAND PID USER" отбрасывает строку заголовка, затем | awk '{print $2}' печатает второе поле, | sort -n подготавливает номера для | uniq, который только выводит каждый уникальный PID один раз. Объединяя все это, получаем:

 lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq  

Но pkill -KILL tomcat или killall -KILL tomcat проще.

1
ответ дан 24 May 2018 в 17:54
  • 1
    Процесс Tomcat не назван «tomcat». Это проблема. Это обычный процесс Java, необходимо выполнить дополнительную работу, чтобы определить правильный процесс, если одновременно работают другие Java-процессы. – Terry Wang 17 September 2013 в 05:18
  • 2
    @TerryWang Yup, это проблема, которая у меня была. Ответ на Steeldrivers отлично работает. – user2757729 17 September 2013 в 18:31

Не забывайте, что опция --no-run-if-empty для kill:)

lsof -ti :8080 | xargs --no-run-if-empty kill -9

Таким образом, kill будет запущен, будет прослушивание процесса, не нужно делать проверьте себя.

1
ответ дан 24 May 2018 в 17:54

Один лайнер из @waltinator велик.

Я добавлю еще немного вкуса к нему:

lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq | xargs kill -9

OR

kill -9 $(lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq)
ПРИМЕЧАНИЕ. Это все еще очень просто, вам может потребоваться добавить больше соли и перца, чтобы сделать его более надежным в реальной среде.
0
ответ дан 24 May 2018 в 17:54

Это сценарий, в котором я немного проверил проверку ошибок.

#!/bin/bash

PORT=$1

if ! [[ "$PORT" =~ ^[0-9]+$ ]] ;
then
  printf "error: '$PORT' is not a number.\n\nUsage killport <port number>\n"
  exit 1
fi

PID=$(lsof -ti:$PORT)

if ! [[ "$PID" =~ ^[0-9]+$ ]] ;
then
  printf "no proccess found, nothing to kill.\n"
  exit 0
fi

printf "killing process $PID running on $PORT\n"
kill -9 $PID
0
ответ дан 24 May 2018 в 17:54

Вот простая функция рыбной оболочки

function kill-port
  set pids (lsof -ti tcp:$argv)
  if test $pids
    kill -9 $pids
  else
    echo "No proccesses on that port to kill to see for your self -- lsof -i tcp:$argv"
  end
end

просто вставьте эту присоску в файл в этом месте ~/.config/fish/functions/kill-port.fish и ваше добро. Вы можете называть его как kill-port 8000

0
ответ дан 24 May 2018 в 17:54

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

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