desenv-web-rp.com

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

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

Eu usei:

netstat -nlp|grep 9000

para ver se existe essa porta e eu consegui isso:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Mas como posso obter o PID do processo que o está mantendo?

427
wuchang

No Linux, você deve ser o root ou o proprietário do processo para obter as informações que deseja. Assim, para processos em execução como outro usuário, preceder Sudo é o que você precisa. Além disso, nos modernos sistemas Linux, 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 lsof:

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

Além disso, você pode usar o utilitário lsof. Precisa ser raiz.

# 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)
143
Vitaliy

Estou usando o "CentOS 7 minimal", que não possui netstat nem lsof. Mas muitas distribuições linux têm o comando socket statistics (ou seja, 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))
14
Oleksandr

A execução do comando com Sudo forneceria 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.

12
isapir

Além disso, você pode usar fuser:

fuser -v -n tcp 22

A saída :

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