Поиск PID процесса с использованием определенного порта?

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

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

netstat -nlp|grep 9000

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

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

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

273 голоса | спросил wuchang 25 WedEurope/Moscow2013-12-25T09:24:08+04:00Europe/Moscow12bEurope/MoscowWed, 25 Dec 2013 09:24:08 +0400 2013, 09:24:08

5 ответов


351

В 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)
ответил Chris Down 25 WedEurope/Moscow2013-12-25T09:27:10+04:00Europe/Moscow12bEurope/MoscowWed, 25 Dec 2013 09:27:10 +0400 2013, 09:27:10
98

Также вы можете использовать утилиту 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)
ответил Vitaliy 25 WedEurope/Moscow2013-12-25T11:25:57+04:00Europe/Moscow12bEurope/MoscowWed, 25 Dec 2013 11:25:57 +0400 2013, 11:25:57
10

Я использую «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))
ответил Alexandr 29 +03002016-10-29T23:46:11+03:00312016bEurope/MoscowSat, 29 Oct 2016 23:46:11 +0300 2016, 23:46:11
8

Выполнение команды с помощью 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.

ответил isapir 30 Jam1000000amMon, 30 Jan 2017 05:04:05 +030017 2017, 05:04:05
6

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

fuser -v -n tcp 22

Выход:

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd
ответил GAD3R 29 +03002016-10-29T23:55:10+03:00312016bEurope/MoscowSat, 29 Oct 2016 23:55:10 +0300 2016, 23:55:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132