Linux как найти процесс по порту

При работе в Unix-системах мне частенько приходится определять, какой процесс занимает порт, например, чтобы остановить его и запустить на нём другой процесс. Поэтому я решил написать эту небольшую статью, чтоб каждый, прочитавший её, мог узнать, каким процессом занят порт в Ubuntu, CentOS или другой ОС из семейства Linux.

Как же вычислить, какие запущенные процессы соотносятся с занятыми портами? Как определить, что за процесс открыл udp-порт 2222, tcp-порт 7777 и т.п.? Получить подобную информацию мы можем нижеперечисленными методами:

netstat
утилита командной строки, показывающая сетевые подключения, таблицы маршрутизации и некоторую статистику сетевых интерфейсов;
fuser
утилита командной строки для идентификации процессов с помощью файлов или сокетов;
lsof
утилита командной строки, отображающая информацию об используемых процессами файлах и самих процессах в UNIX-системе;
/proc/$pid/
в ОС Linux /proc для каждого запущенного процесса содержит директорию (включая процессы ядра) в /proc/$PID с информацией об этом процессе, в том числе и название процесса, открывшего порт.

Использование вышеперечисленных способов может потребовать права супер-пользователя.

Теперь давайте рассмотрим каждый из этих способов по отдельности.

Пример использования netstat

Введём в командную строку команду:

$ netstat -tulpn


Получим примерно такой результат:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:10843           0.0.0.0:*               LISTEN      7023/node           
tcp        0      0 127.0.0.1:4942          0.0.0.0:*               LISTEN      3413/java           
...


Из вывода видно, что 4942-й порт был открыт Java-приложением с PID’ом 3413. Проверить это можно через /proc:

$ ls -l /proc/3413/exe


Примерный результат выполнения команды:

lrwxrwxrwx. 1 user user 0 Nov 10 20:31 /proc/3413/exe -> /opt/jdk1.8.0_60/bin/java


При необходимости получения информации по конкретному порту (например, 80-му, используемого обычно для HTTP) вместо отображения всей таблицы можно grep-ануть результат:

$ netstat -tulpn | grep ':80 '


Результат будет примерно такой:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1607/apache2


Пример использования fuser

Для того, чтобы вычислить процесс, занимающий порт 5050, введём команду:

$ fuser 5050/tcp


И получим результат:

5050/tcp:             3813


Аналогичным образом, как мы делали выше, можно посмотреть процесс в его директории /proc/$PID, в которой можно найти много интересной дополнительной информации о процессе, такую как рабочая директория процесса, владелец процесса и т.д., но это выходит за рамки этой статьи.

Пример использования lsof

При использовании lsof введите команду по одному из шаблонов:

lsof -i :$portNumber
lsof -i tcp:$portNumber
lsof -i udp:$portNumber


Пример реального использования:

lsof -i :80 | grep LISTEN


Результат выполнения:

apache2   2123     root    3u  IPv4   6472      0t0  TCP *:www (LISTEN)
apache2   2124 www-data    3u  IPv4   6472      0t0  TCP *:www (LISTEN)
apache2   2125 www-data    3u  IPv4   6472      0t0  TCP *:www (LISTEN)
apache2   2126 www-data    3u  IPv4   6472      0t0  TCP *:www (LISTEN)


После этого мы можем получить более полную информацию о процессах с PID’ами 2123, 2124 и т.д..

$ ps aux | grep 2124


На выходе получим примерно следующее:

www-data 2124 0.0 0.0 36927 4991 ? S 10:20 0:00 /usr/sbin/apache2 -k start


Получить информацию о процессе также можно следующим проверенным способом:

$ ps -eo pid,user,group,args,etime,lstart | grep '2727'


2727 www-data www-data /usr/sbin/apache2 -k start     14:27:33 Mon Nov 30 21:21:28 2015


В этом выводе можно выделить следующие параметры:

  • 2727 — PID;
  • www-date — имя пользователя владельца;
  • www-date — название группы;
  • /usr/sbin/apache2 -k start — название команды с аргументами;
  • 14:27:33 — время работы процесса в формате [[дд-]чч:]мм:сс;
  • Mon Nov 30 21:21:28 2015 — время старта процесса.

Надеюсь, у меня получилось доступно объяснить, как определить процесс по порту в Linux-системах, и теперь у вас ни один порт не останется неопознанным!

До новых статей!

Find processes based on port number and kill them all.

ps -efl | grep PORT_NUMBER | kill -9 process_found_previously

how to complete the last column?

Oleg's user avatar

Oleg

9,2912 gold badges43 silver badges58 bronze badges

asked Feb 18, 2011 at 16:23

yli's user avatar

0

The problem with ps -efl | grep PORT_NUMBER is that PORT_NUMBER may match other columns in the output of ps as well (date, time, pid, …). A potential killing spree if run by root!

I would do this instead :

PORT_NUMBER=1234
lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill 

Breakdown of command

  • (lsof -i tcp:${PORT_NUMBER}) — list all processes that is listening on that tcp port
  • (awk 'NR!=1 {print $2}') — ignore first line, print second column of each line
  • (xargs kill) — pass on the results as an argument to kill. There may be several.

answered Feb 18, 2011 at 16:31

Shawn Chin's user avatar

Shawn ChinShawn Chin

83.4k19 gold badges160 silver badges191 bronze badges

9

1.) lsof -w -n -i tcp:8080

2.) kill -9 processId

answered Sep 9, 2013 at 8:38

thegrunt's user avatar

thegruntthegrunt

1,0541 gold badge11 silver badges22 bronze badges

1

kill $( lsof -i:6000 -t )

Or if you need permissions:

sudo kill $( sudo lsof -i:6000 -t )

Ohad Schneider's user avatar

answered Sep 6, 2012 at 8:14

DanS's user avatar

DanSDanS

17.3k9 gold badges53 silver badges47 bronze badges

3

Propose to use fuser command:

fuser -k -TERM -n tcp ${PORT_NUMBER}

answered Feb 19, 2011 at 2:23

Michael Zarubin's user avatar

3

sudo fuser -k 8080/tcp

An easy one to remember.

This syntax is probably much more recent than the date of the question!

answered May 9, 2017 at 13:10

NVRM's user avatar

NVRMNVRM

11k1 gold badge85 silver badges85 bronze badges

... | awk '{ print $4 }' | xargs kill -9

please test with «echo» instead of «kill» before running

Farvardin's user avatar

Farvardin

5,3165 gold badges33 silver badges54 bronze badges

answered Feb 18, 2011 at 16:26

vmpstr's user avatar

vmpstrvmpstr

5,0312 gold badges25 silver badges25 bronze badges

3

To kill all processes listening on a particular port, e.g. port 8864

kill -9 $ `lsof -i:8864 -t`

Replace 8864 by the port you want.

Shawn Chin's user avatar

Shawn Chin

83.4k19 gold badges160 silver badges191 bronze badges

answered Aug 23, 2011 at 17:41

Shams Naved's user avatar

Given a port number how can we find which process is using it?

asked Dec 9, 2012 at 16:14

Hashken's user avatar

1

We have a variety of options:

  • netstat
  • fuser
  • lsof

netstat

sudo netstat -nlp

will give you all open network connections.

$ netstat -nlp
(No info could be read for "-p": geteuid()=901743 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:44886           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:8139            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:81            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:48562           0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
tcp6       0      0 :::46871                :::*                    LISTEN      -               
tcp6       0      0 ::1:6010                :::*                    LISTEN      -               
tcp6       0      0 :::57179                :::*                    LISTEN      -               
tcp6       0      0 :::5666                 :::*                    LISTEN      -               
tcp6       0      0 :::111                  :::*                    LISTEN      -               
tcp6       0      0 :::4949                 :::*                    LISTEN      -               
udp        0      0 127.0.0.1:896           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:45467           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:111             0.0.0.0:*                           -               
udp        0      0 10.105.2.3:123          0.0.0.0:*                           -               
udp        0      0 127.0.0.1:123           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:123             0.0.0.0:*                           -               
udp        0      0 0.0.0.0:39554           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:711             0.0.0.0:*                           -               
udp        0      0 0.0.0.0:10000           0.0.0.0:*                           -               
udp6       0      0 :::53766                :::*                                -               
udp6       0      0 :::49696                :::*                                -               
udp6       0      0 :::111                  :::*                                -               
udp6       0      0 fe80::5054:ff:fed0::123 :::*                                -               
udp6       0      0 ::1:123                 :::*                                -               
udp6       0      0 :::123                  :::*                                -               
udp6       0      0 :::711                  :::*                                -               
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     7943     -                   /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     8494     -                   /run/rpcbind.sock
unix  2      [ ACC ]     STREAM     LISTENING     729659   -                   /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     11324    -                   /var/run/php5-fpm.sock
unix  2      [ ACC ]     STREAM     LISTENING     11082    -                   /var/run/nscd/socket
unix  2      [ ACC ]     STREAM     LISTENING     7607     -                   @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     668784   -                   /var/run/nslcd/socket
unix  2      [ ACC ]     SEQPACKET  LISTENING     6768     -                   /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     8924     -                   /var/run/acpid.socket

lsof

lsof -i tcp:43796

will give you the list of processes using tcp port 43796.

$ lsof -i tcp:1723
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
pptpd   2870 root    6u  IPv4  17638      0t0  TCP *:1723 (LISTEN)

fuser

fuser 43796/tcp

will give you the list of pids using tcp port 43796.

$ fuser 1723/tcp
1723/tcp:             2870

Source

muru's user avatar

muru

191k52 gold badges467 silver badges718 bronze badges

answered Dec 9, 2012 at 16:25

Hashken's user avatar

HashkenHashken

6,1625 gold badges32 silver badges49 bronze badges

1

Try lsof

sudo lsof -n -P -i +c 13

Output will be like

COMMAND       PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-daemon 1222    avahi   13u  IPv4  10835      0t0  UDP *:5353 
avahi-daemon 1222    avahi   14u  IPv6  10836      0t0  UDP *:5353 
avahi-daemon 1222    avahi   15u  IPv4  10837      0t0  UDP *:32913 
avahi-daemon 1222    avahi   16u  IPv6  10838      0t0  UDP *:41774 
cupsd        1242     root    8u  IPv6   1847      0t0  TCP [::1]:631 (LISTEN)
cupsd        1242     root    9u  IPv4   1848      0t0  TCP 127.0.0.1:631 (LISTEN)
dhclient     1859     root    6u  IPv4  11971      0t0  UDP *:68 
gdomap       1876   nobody    3u  IPv4  11083      0t0  UDP *:538 
gdomap       1876   nobody    4u  IPv4  11084      0t0  TCP *:538 (LISTEN)
master       1975     root   12u  IPv4  12024      0t0  TCP 127.0.0.1:25 (LISTEN)
master       1975     root   13u  IPv6  12025      0t0  TCP [::1]:25 (LISTEN)
dnsmasq      1987   nobody    4w  IPv4  12039      0t0  UDP 127.0.0.1:53 
dnsmasq      1987   nobody    5u  IPv4  12040      0t0  TCP 127.0.0.1:53 (LISTEN)
firefox      4370 shashank   50u  IPv4  18226      0t0  TCP 192.168.1.2:33467->69.171.248.16:443 (ESTABLISHED)

Or Try netstat

 sudo netstat --tcp --programs

output will be like

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp       29      0 192.168.1.2:44054       69.59.197.29:http       ESTABLISHED 4370/firefox    
tcp        0      0 192.168.1.2:44087       69.59.197.29:http       ESTABLISHED 4370/firefox    
tcp       58      0 192.168.1.2:43895       69.59.197.29:http       ESTABLISHED 4370/firefox    
tcp       58      0 192.168.1.2:43935       69.59.197.29:http       ESTABLISHED 4370/firefox  

answered Dec 9, 2012 at 17:06

shsh's user avatar

shshshsh

1937 bronze badges

lsof -t -itcp:PORT

e.g

$ lsof -t -itcp:8080
17396

A.B.'s user avatar

A.B.

88.5k21 gold badges245 silver badges321 bronze badges

answered Jun 17, 2015 at 14:56

Eyal Levin's user avatar

Eyal LevinEyal Levin

5316 silver badges13 bronze badges

Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) — в Linux существует несколько утилит командной строки, которые могут с этим помочь. Давайте разберемся!

Первым делом на ум приходит утилита netstat, с помощью которой можно проверить сетевые соединения, статистику сетевых интерфейсов, таблицу маршрутизации и т. д.

Устанавливается данная утилита в разных дистрибутивах по-разному, например, для RedHat и CentOS:

sudo yum install net-tools

Fedora 22+:

Debian/Ubuntu:

sudo apt-get install net-tools

Для вывода детальной информации о всех TCP и UDP ендпоинтах можно воспользоваться следующей командой:

Вывод будет примерно следующим:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      1323/systemd-resolv
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1661/sshd
tcp        0      0 127.0.0.1:17123         0.0.0.0:*               LISTEN      1753/python
tcp6       0      0 :::31341                :::*                    LISTEN      30068/java
tcp6       0      0 :::22222                :::*                    LISTEN      30068/java
tcp6       0      0 :::80                   :::*                    LISTEN      30068/java
tcp6       0      0 :::10769                :::*                    LISTEN      126755/docker-proxy
tcp6       0      0 :::10770                :::*                    LISTEN      129459/docker-proxy
tcp6       0      0 :::10771                :::*                    LISTEN      129540/docker-proxy
tcp6       0      0 :::10772                :::*                    LISTEN      130172/docker-proxy
tcp6       0      0 :::10773                :::*                    LISTEN      130187/docker-proxy
tcp6       0      0 :::10774                :::*                    LISTEN      130545/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1661/sshd
tcp6       0      0 :::10775                :::*                    LISTEN      7406/docker-proxy

Здесь:

  • -p — вывод ID процесса и его имени;
  • -n — вывод адресов;
  • -l — вывод сокетов;
  • -t — вывод TCP соединений;
  • -u — вывод UDP соединений.

Найти сервис, запущенный на определенном порту можно так:

netstat -pnltu | grep -i "22"

Аналогично можно найти на каком порту запущен определенный сервис:

netstat -pnltu | grep -i "sshd"

Также для наших целей подойдет утилита командной строки fuser. По умолчанию она не установлена в большинстве операционных систем, чтобы установить ее в Centos/RedHat делаем так:

Fedora 22+

Debian/Ubuntu

Например, чтобы найти идентификаторы процессов (PIDs), запущенных на 80-м порту, выполняем команду:

Результат выполнения будет примерно следующим:

22/tcp:               1661 105268 105302

Далее можем найти имя процесса по его идентификатору (PID):

Результат:

Еще один способ — использование утилиты lsof. Установка ее в RedHat/CentOS выглядит так:

Fedora 22+

Debian/Ubuntu:

Вывод всех активных TCP и UPD соединений:

Результатом будет примерно следующее:

COMMAND      PID            USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
systemd-r   1323 systemd-resolve   12u  IPv4     20197      0t0  UDP 127.0.0.53:domain
systemd-r   1323 systemd-resolve   13u  IPv4     20198      0t0  TCP 127.0.0.53:domain (LISTEN)
sshd        1661            root    3u  IPv4     29741      0t0  TCP *:ssh (LISTEN)
sshd        1661            root    4u  IPv6     29743      0t0  TCP *:ssh (LISTEN)
python      1754        dd-agent    4u  IPv6     39499      0t0  UDP localhost.localdomain:8125
docker-pr   7406            root    4u  IPv6 287933991      0t0  TCP *:10775 (LISTEN)
docker-pr   7459            root    4u  IPv6 287906596      0t0  TCP *:10776 (LISTEN)
docker-pr   7792            root    4u  IPv6 287937795      0t0  TCP *:10777 (LISTEN)
docker-pr   8435            root    4u  IPv6 287955267      0t0  TCP *:10778 (LISTEN)
docker-pr   8447            root    4u  IPv6 287915222      0t0  TCP *:10779 (LISTEN)
docker-pr   9060            root    4u  IPv6 287891442      0t0  TCP *:10780 (LISTEN)
docker-pr   9429            root    4u  IPv6 287957044      0t0  TCP *:10781 (LISTEN)
docker-pr   9463            root    4u  IPv6 287921075      0t0  TCP *:10782 (LISTEN)
ntpd       10594             ntp   16u  IPv6  35365570      0t0  UDP *:ntp

Проверить использование конкретного порта можно так:

Результат:

COMMAND    PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
sshd      1661   root    3u  IPv4     29741      0t0  TCP *:ssh (LISTEN)
sshd      1661   root    4u  IPv6     29743      0t0  TCP *:ssh (LISTEN)

Напоследок можно также воспользоваться утилитой whatportis. Ее установка в RedHat/Centos требует чуть больше действий:

yum install python34-setuptools

В Debian/Ubuntu все гораздо проще:

В общем виде использование утилиты выглядит так:

whatportis [номер_порта | имя_сервиса]

Если вам неизвестно точное имя сервиса, можно воспользоваться опцией --like, например:

Также доступен вывод информации в json-формате:

A port is a logical entity that represents an endpoint of communication and is associated with a given process or service in an operating system. In previous articles, we explained how to find out the list of all open ports in Linux and how to check if remote ports are reachable using the Netcat command.

In this short guide, we will show different ways of finding the process/service listening on a particular port in Linux.

1. Using netstat Command

netstat (network statistics) command is used to display information concerning network connections, routing tables, interface stats, and beyond. It is available on all Unix-like operating systems including Linux and also on Windows OS.

In case you do not have it installed by default, use the following command to install it.

$ sudo apt-get install net-tools    [On Debian/Ubuntu & Mint] 
$ sudo dnf install net-tools        [On CentOS/RHEL/Fedora and Rocky Linux/AlmaLinux]
$ pacman -S netstat-nat             [On Arch Linux]
$ emerge sys-apps/net-tools         [On Gentoo]
$ sudo dnf install net-tools        [On Fedora]
$ sudo zypper install net-tools     [On openSUSE]

Once installed, you can use it with the grep command to find the process or service listening on a particular port in Linux as follows (specify the port).

$ netstat -ltnp | grep -w ':80' 

Check Port Using netstat Command

Check Port Using netstat Command

In the above command, the flags.

  • l – tells netstat to only show listening sockets.
  • t – tells it to display tcp connections.
  • n – instructs it to show numerical addresses.
  • p – enables showing of the process ID and the process name.
  • grep -w – shows matching of exact string (:80).

Note: The netstat command is deprecated and replaced by the modern ss command in Linux.

2. Using lsof Command

lsof command (List Open Files) is used to list all open files on a Linux system.

To install it on your system, type the command below.

$ sudo apt-get install lsof     [On Debian, Ubuntu and Mint]
$ sudo yum install lsof         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/lsof  [On Gentoo Linux]
$ sudo pacman -S lsof           [On Arch Linux]
$ sudo zypper install lsof      [On OpenSUSE]    

To find the process/service listening on a particular port, type (specify the port).

$ lsof -i :80

Find Port Using lsof Command

Find Port Using lsof Command

3. Using fuser Command

fuser command shows the PIDs of processes using the specified files or file systems in Linux.

You can install it as follows:

$ sudo apt-get install psmisc     [On Debian, Ubuntu and Mint]
$ sudo yum install psmisc         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
$ sudo emerge -a sys-apps/psmisc  [On Gentoo Linux]
$ sudo pacman -S psmisc           [On Arch Linux]
$ sudo zypper install psmisc      [On OpenSUSE]    

You can find the process/service listening on a particular port by running the command below (specify the port).

$ fuser 80/tcp

Then find the process name using PID number with the ps command like so.

$ ps -p 2053 -o comm=
$ ps -p 2381 -o comm=

Find Port and Process ID in Linux

Find Port and Process ID in Linux

You can also check out these useful guides about processes in Linux.

  • All You Need To Know About Processes in Linux [Comprehensive Guide]
  • Limit CPU Usage of a Process in Linux with CPULimit Tool
  • How to Find and Kill Running Processes in Linux
  • Find Top Running Processes by Highest Memory and CPU Usage in Linux

That’s all! Do you know of any other ways of finding the process/service listening on a particular port in Linux, let us know via the comment form below.

If you read this far, tweet to the author to show them you care. Tweet a thanks

Photo of author

Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.


Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Понравилась статья? Поделить с друзьями:
  • Как найти площадь круга известен диаметр формула
  • Как найти подход к ребенку в школе
  • Как составить дополнительное соглашение при переводе работника на другую должность
  • Lvrs64 sys синий экран windows 10 как исправить
  • Василиски как их найти в ведьмаке