Encontrando o PID do processo usando uma porta específica?

320

Estou instalando o hadoop no meu sistema Ubuntu. Quando eu inicio, relata que a porta 9000 está ocupada.

Eu usei:

netstat -nlp|grep 9000

para ver se existe uma porta desse tipo e eu percebi isso:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Mas como posso obter o PID do processo que o mantém?

    
por wuchang 25.12.2013 / 06:24

5 respostas

401

No Linux, você deve ser o usuário root ou outro usuário para obter informações de processo para processos sendo executados como outros usuários. Por isso, a inclusão de sudo é a maior parte do que você precisa. Além disso, em sistemas Linux modernos, ss é uma ferramenta a ser usada para fazer isso:

$ 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))

Você também pode usar a mesma chamada que está usando no momento, mas lembre-se de sudo :

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

Você também pode usar o lsof:

$ sudo lsof -n -i :80 | grep LISTEN
nginx   125004 nginx    3u  IPv4   6645      0t0  TCP 0.0.0.0:80 (LISTEN)
    
por 25.12.2013 / 06:27
116

Você também pode usar o utilitário lsof . Precisa ser 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)
    
por 25.12.2013 / 08:25
10

Estou usando o "CentOS 7 minimal" que não tem netstat nem lsof . Mas muitas distribuições de Linux têm o comando de estatísticas de soquete (por exemplo, ss ).

Aqui está um exemplo de execução:

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

A execução do comando com sudo fornecerá o PID . Na minha máquina de desenvolvimento, recebo:

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

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

E, como mencionado em outras respostas, você também pode usar os comandos ss ou lsof .

    
por 30.01.2017 / 03:04
7

Você também pode usar fuser :

fuser -v -n tcp 22

A saída:

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