shell-скрипт, чтобы убить процесс слушает на порту 3000? [дубликат]



этот вопрос уже есть ответ здесь:



Я хочу определить псевдоним bash с именем kill3000 для автоматизации следующих задач:



$ lsof -i:3000

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 13402 zero 4u IPv4 2847851 0t0 TCP *:3000 (LISTEN)

$ kill -9 13402
625   6  

6 ответов:

alias kill3000="fuser -k -n tcp 3000"

попробуйте это:

    kill -9 $(lsof -i:3000 -t)

флаг-t-это то, что вы хотите: он отображает PID, и ничего больше.

обновление

В случае, если процесс не найден и вы не хотите видеть сообщение об ошибке:

    kill -9 $(lsof -i:3000 -t) 2> /dev/null

предполагая, что вы работаете bash.

обновление

предложение Базиля отлично: мы должны сначала попытаться завершить процесс нормально будет kill-TERM, если не получилось, тогда Kill-убить (АКА убить -9):

    pid=$(lsof -i:3000 -t); kill -TERM $pid || kill -KILL $pid

вы можете сделать это функцией bash.

другой вариант использования с использованием оригинала :

lsof -n -i:3000 | grep LISTEN | awk '{ print  }' | uniq | xargs kill -9

если вы хотите использовать это в сценарии оболочки, вы можете добавить -r флаг xargs для обработки случая, когда ни один процесс не слушает:

... | xargs -r kill -9

как о

alias kill3000="lsof -i:3000 | grep LISTEN | awk '{print }' | xargs kill -9"
fuser -n tcp 3000

даст выход

3000/tcp:     <$pid>

Так что вы могли бы сделать:

fuser -n tcp 3000 | awk '{ print  }' | xargs -r kill

fuser -k 3000/tcp также должны работать

Comments

    Ничего не найдено.