Определите процесс pid, прослушивающий определенный порт
Как говорится в названии, я запускаю несколько игровых серверов, и каждый из них имеет те же самые name
, но разные PID
и port
. Я хотел бы сопоставить PID
сервера, который прослушивает определенный порт, а затем я хотел бы убить этот процесс. Мне нужно это, чтобы завершить мой bash script.
Возможно ли это? Потому что он не нашел никаких решений в Интернете.
Ответы
Ответ 1
Флаг -p
netstat
дает вам PID процесса:
netstat -l -p
Изменить: Команда, необходимая для получения PID для пользователей сокетов во FreeBSD, это sockstat
.
Как мы разработали во время обсуждения с @Cyclone, строка, которая выполняет задание, это:
sockstat -4 -l | grep :80 | awk '{print $3}' | head -1
Ответ 2
Короткая версия, которую вы можете передать команде kill:
lsof -i:80 -t
Ответ 3
netstat -p -l | grep $PORT
netstat -p -l | grep $PORT
и lsof -i :$PORT
решения lsof -i :$PORT
хороши, но я предпочитаю синтаксис расширения fuser $PORT/tcp
для lsof -i :$PORT
POSIX (который работает для coreutils
), как с pipe:
pid='fuser $PORT/tcp'
он печатает чистый PID, так что вы можете оставить sed
в магию.
Одна вещь, которая делает fuser
my lover tools - это возможность посылать сигнал этому процессу напрямую (этот синтаксис также является расширением для POSIX):
$ fuser -k $port/tcp # with SIGKILL
$ fuser -k -15 $port/tcp # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM
Также -k поддерживается FreeBSD: http://www.freebsd.org/cgi/man.cgi?query=fuser
Ответ 4
netstat -nlp
должен указать PID того, что прослушивает какой порт.
Ответ 5
Так как sockstat не был изначально установлен на моей машине, я взломал stanwise, чтобы вместо этого использовать netstat.
netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g""
Ответ 6
Я хотел программно - использовать только Bash - убить процесс, прослушивающий данный порт.
Скажем, порт 8089, вот как я это сделал:
badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid
Надеюсь, это поможет кому-то еще! Я знаю, что это поможет моей команде.
Ответ 7
в окнах опция netstat для получения pid равна -o, а -p выбирает фильтр протокола, например: netstat -a -p tcp -o
Ответ 8
Синтаксис:
убить -9 $ (lsof -t -i: номер порта)
Пример: чтобы завершить процесс, запущенный на порте 4200, выполните следующую команду
kill -9 $(lsof -t -i:4200)
Проверено в Ubuntu.