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
6 ответов:
попробуйте это:
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
fuser -n tcp 3000даст выход
3000/tcp: <$pid>Так что вы могли бы сделать:
fuser -n tcp 3000 | awk '{ print }' | xargs -r kill
Comments