Нахождение PID процесса с использованием определенного порта?


392

Я устанавливаю hadoop в моей системе Ubuntu. Когда я запускаю его, он сообщает, что порт 9000 занят.

Я использовал:

netstat -nlp|grep 9000

чтобы увидеть, существует ли такой порт, и я получил это:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Но как я могу получить PID процесса, который его держит?




netstatКоманда может работать во многих операционных системах, чтобы вы могли это получить, вам просто нужно найти аргументы, которые обеспечат отображение pids вдоль каждого известного открытого порта.
Лучано

Ответы:


474

В Linux вы должны быть пользователем root или владельцем процесса, чтобы получить желаемую информацию. Таким образом, для процессов, запущенных от имени другого пользователя, предварительная подготовка sudo- это большая часть того, что вам нужно. В дополнение к этому, в современных системах Linux ssесть инструмент для этого:

$ sudo ss -lptn 'sport = :80'
State   Local Address:Port  Peer Address:Port              
LISTEN  127.0.0.1:80        *:*                users:(("nginx",pid=125004,fd=12))
LISTEN  ::1:80              :::*               users:(("nginx",pid=125004,fd=11))

Вы также можете использовать тот же вызов, который вы используете в данный момент, но не забывайте sudo:

$ sudo netstat -nlp | grep :80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

Вы также можете использовать lsof:

$ sudo lsof -n -i :80 | grep LISTEN
nginx   125004 nginx    3u  IPv4   6645      0t0  TCP 0.0.0.0:80 (LISTEN)

36
Примечание: в OSX -pопция предназначена для протокола, а не для процесса. Смотрите этот вопрос
Брайан П

3
@BryanP ОП попросил Ubuntu, так что это неважно ...
Адам Б.

43
@AdamB Если пользователь Mac не прибыл сюда в поискахFinding the PID of the process using a specific port
mraaroncruz

2
Этот ответ, вероятно, будет улучшен, если поставить sudoсверху.
Ночь

2
@MrOnyancha Используйте краткие (-t) опции -lsof -ti tcp:80
Мохниш,

138

Также вы можете использовать lsofутилиту. Нужно быть root.

# lsof -i :25
COMMAND  PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
exim4   2799 Debian-exim    3u  IPv4   6645      0t0  TCP localhost:smtp (LISTEN)
exim4   2799 Debian-exim    4u  IPv6   6646      0t0  TCP localhost:smtp (LISTEN)

9
Эта команда также даст вам процессы с establishedподключениями, а не только процессы, которые есть listening.
firelynx

1
Не обязательно быть root. И, для тех, кто хочет получить только PID, вы можете lsof -i :25 -Fp, который производит вывод, как p1234.
Роберт

12

Я использую "CentOS 7 минимальный", который не имеет ни того, netstatни другого lsof. Но во многих дистрибутивах Linux есть команда статистики сокетов (т.е. ss).

Вот пример выполнения:

# ss -tanp | grep 6379
LISTEN   0    128  127.0.0.1:6379   *:*   users:(("redis-server",pid=2531,fd=4))

1
Смотрите такжеss -pntl 'sport = :6379'
Стефан Шазелас

10

Запуск команды с sudoдаст вам PID. На моей машине разработки я получаю:

$ netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      -

$ sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/java

И, как упоминалось в других ответах, вы также можете использовать команды ssили lsof.


запуск команды в качестве sudoидентификатора процесса отображения
Евгений Коньков

Но что, если sudo netstat -nlp | grep 34157все еще отображать -вместо PID?
Евгений Коньков

8

Также вы можете использовать fuser:

fuser -v -n tcp 22

Выход :

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd

Не работает fuser -v -n tcp 80 , даже если я пытаюсь использовать sudo
SuperKrish

1
Примечание: это требует, sudoесли процесс оскорбления также был запущенsudo
laggingreflex

1
Это хорошая вещь, чтобы помнить вообще. Команды в Linux обычно не дают информацию о процессах, запускаемых root / sudo, если только команда не запускается с помощью Sudo. Это верно даже в том случае, когда команде обычно не требуется sudo для корректной работы.
njfife
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.