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

Если то, что Вы хотите, должно позволить dev выполнять произвольные команды как tomcat, затем не беспокойтесь su, палка с sudo. Добавьте следующую строку к sudoers файл (используют visudo команда):

dev ALL = (tomcat) NOPASSWD: ALL

Выполненный sudo -iu tomcat как пользователь dev выполнять оболочку входа в систему как tomcat.

411
14.04.2016, 11:11
6 ответов

На Linux необходимо быть корнем или владельцем процесса для получения информации, которой Вы требуете. По сути, для процессов, работающих как другой пользователь, предварительно ожидая 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)
511
27.01.2020, 19:28
  • 1
    : под OSX, -p опция для протокола, а не процесса. Посмотрите этот вопрос –  Bryan P 10.04.2016, 19:51
  • 2
    @BryanP, который OP, которые попросили Ubuntu, таким образом, это - вид несоответствующих... –  Adam B 21.09.2016, 17:26
  • 3
    @AdamB, Если пользователь Mac не прибыл, сюда ища Finding the PID of the process using a specific port –  mraaroncruz 10.10.2016, 14:05
  • 4
    Этот ответ был бы, вероятно, улучшен путем помещения потребности в sudo наверху. –  Nacht - Reinstate Monica 06.01.2017, 03:10
  • 5
    @MrOnyancha краткие (-t) опции - lsof -ti tcp:80 –  Mohnish 19.07.2017, 16:58

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

# 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)
140
27.01.2020, 19:28
  • 1
    Эта команда также даст, Вы обрабатываете с established соединения, не просто обрабатывает, которые являются listening. –  firelynx 18.08.2015, 13:10
  • 2
    Не обязательно, чтобы быть корнем. И, для тех, кто хочет получить PID только, Вы можете lsof -i :25 -Fp, который производит вывод как p1234. –  Robert 09.03.2017, 12:27

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

fuser -v -n tcp 22

Выход :

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd
10
27.01.2020, 19:28

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

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

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

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

11
27.01.2020, 19:28

Я работаю над системой Yocto Linux с ограниченным набором доступных инструментов Linux. Мне удалось найти процесс работающего порта, используя следующие команды (, где я нахожу процесс, используя порт 1883):

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      
root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

Как видно выше, именно программа /usr/sbin/mosquittoиспользует порт 1883.

4
04.05.2020, 05:31

Теги

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