Определите процесс 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.