Определить PID процесса прослушивает определенный порт


как говорится в названии, я запускаю несколько игровых серверов, и каждый из них имеет то же самое name но разные PID и port количество. Я хотел бы соответствовать PID сервера, который слушает на определенном порту, а затем я хотел бы убить этот процесс. Мне это нужно, чтобы завершить мой сценарий bash.

это вообще возможно? Потому что он еще не нашел никаких решений в интернете.

7 77

7 ответов:

The -p флаг netstat дает вам PID процесса:

netstat -l -p

Edit: команда, которая необходима для получения PIDs пользователей сокетов во FreeBSD-это sockstat. Как мы выяснили во время обсуждения с @Cyclone, строка, которая выполняет эту работу:

sockstat -4 -l | grep :80 | awk '{print }' | head -1

короткая версия, которую вы можете пройти, чтобы убить команду:

lsof -i:80 -t

netstat -p -l | grep $PORT и lsof -i :$PORT решения хороши, но я предпочитаю fuser $PORT/tcp синтаксис расширения для POSIX (который работает для coreutils) как с трубой:

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

netstat -nlp должен сказать вам PID того, что слушает на каком порту.

поскольку 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 }' | sed -e "s/\/.*//g""

Я хочу программно -- используя только Bash -- убить процесс прослушивания на данном порту.

допустим, порт 8089, то вот как я это сделал:

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print }' | awk -F/ '{print }' | head -1)
kill -9 $badPid

Я надеюсь, что это поможет кому-то еще! Я знаю, что это поможет моей команде.

в windows опция netstat для получения pid - o и-p выбирает фильтр протокола, например.: netstat-a-p tcp-o