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

Eu usei:

netstat -nlp|grep 9000 

para ver se essa porta existe e Consegui:

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

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

Comentários

Resposta

No Linux, você deve ser root ou o proprietário do processo para obter as informações que deseja. Dessa forma, para processos executados como outro usuário, anteceder 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 invocação que você “está usando atualmente, 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 use lsof:

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

Comentários

  • Observação: no OSX, o -p opção é para protocolo em vez de processo. Veja esta pergunta
  • @BryanP o OP pediu para Ubuntu para que ' é meio irrelevante …
  • @AdamB A menos que um usuário Mac chegue aqui procurando por Finding the PID of the process using a specific port
  • Esta resposta provavelmente seria melhorada colocando a necessidade de sudo no topo.
  • @MrOnyancha Use as opções concisas (-t) – lsof -ti tcp:80

Resposta

Você também pode usar lsof util ity. 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) 

Comentários

  • Este comando também fornecerá processos com established conexões, não apenas processos que são listening.
  • Não necessariamente como root. E, para aqueles que desejam obter apenas o PID, você pode lsof -i :25 -Fp, que produz uma saída como p1234.

Resposta

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

Comentários

  • Veja também ss -pntl 'sport = :6379'

Resposta

Você também pode usar fuser:

fuser -v -n tcp 22 

O resultado:

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

Comentários

  • Não ' t funcionando fuser -v -n tcp 80 , mesmo eu tento com sudo
  • Observação: isso requer sudo se o processo ofensivo também foi iniciado com sudo
  • Isso é uma boa coisa para lembrar em geral. Os comandos no Linux geralmente não ' fornecem informações sobre processos iniciados por root / sudo, a menos que o comando seja executado com Sudo. Isso é verdadeiro mesmo quando o comando normalmente não precisa do sudo para ser executado corretamente.

Resposta

Executando o comando com sudo daria 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 o ss ou os lsof comandos.

Comentários

  • executando o comando como sudo exibir ID do processo
  • Mas e se sudo netstat -nlp | grep 34157 ainda exibir - em vez de PID?

Resposta

Estou trabalhando em um sistema Yocto Linux que tem um conjunto limitado de ferramentas Linux disponíveis. Consegui encontrar o processo de uma porta em execução usando os seguintes comandos (onde encontro o processo usando a porta 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  

Como podemos ver acima, é o programa /usr/sbin/mosquitto que usa a porta 1883.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *