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ãolistening
. - 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 comop1234
.
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 comsudo
- 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.
netstat
pode funcionar em muitos sistemas operacionais para permitir que você obtenha isso, você apenas precisa encontrar os argumentos que garantirão que ele mostrará pids ao longo de cada porta aberta conhecida.