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


392

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?




netstatO comando pode funcionar em muitos sistemas operacionais para permitir isso, basta encontrar os argumentos que garantirão que ele mostre pids ao longo de cada porta aberta conhecida.
— Luciano

Respostas:


474

No Linux, você deve ser o root ou o proprietário do processo para obter as informações que deseja. Como tal, para processos em execução como outro usuário, a pré sudo- anexação é o que você precisa. Além disso, nos modernos sistemas Linux, ssexiste uma ferramenta 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)

36
Nota: no OSX, a -popção é para protocolo e não para processo. Veja esta pergunta
— Bryan P

3
@BryanP o OP pediu Ubuntu de modo que é meio irrelevante ...
— Adam B

43
@AdamB A menos que um usuário do Mac tenha chegado aqui procurando porFinding the PID of the process using a specific port
— mraaroncruz 10/10

2
Essa resposta provavelmente seria melhorada, colocando a necessidade sudono topo.
— Nacht

2
@MrOnyancha Use as opções concha (-t) - #lsof -ti tcp:80
— Mohnish 19/17

138

Além disso, você pode usar o lsofutilitário. 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)

9
Este comando também fornecerá processos com establishedconexões, não apenas processos que são listening.
— precisa saber é o seguinte

1
Não necessariamente para ser raiz. E, para aqueles que desejam obter apenas PID, você pode lsof -i :25 -Fp, o que produz resultados semelhantes p1234.
— Robert

12

Eu estou usando "CentOS 7 mínima", que tem nem netstatnem lsof. Mas muitas distribuições Linux têm o comando socket statistics (ie 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))

1
Veja tambémss -pntl 'sport = :6379'
— Stéphane Chazelas

10

A execução do comando sudodaria a você 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 ssos lsofcomandos ou .


comando executado como sudoID do processo de exibição
— Eugen Konkov

Mas e se sudo netstat -nlp | grep 34157ainda for exibido em -vez de PID?
— Eugen Konkov

8

Também você pode usar fuser:

fuser -v -n tcp 22

A saída :

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

Ele não trabalha fusor -v tcp -n 80 , mesmo tento com sudo
— SuperKrish

1
Nota: Isso requer sudoque o processo sudo
— incorreto

1
É uma coisa boa a lembrar em geral. Os comandos no Linux geralmente não fornecem informações sobre processos iniciados pelo root / sudo, a menos que o comando seja executado com o Sudo. Isso é verdade mesmo quando o comando normalmente não precisa do sudo para funcionar corretamente.
— Njfife 6/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.