web-dev-qa-db-fra.com

Trouver le PID du processus en utilisant un port spécifique?

J'installe hadoop sur mon système Ubuntu. Lorsque je le démarre, il signale que le port 9000 est occupé.

J'ai utilisé:

netstat -nlp|grep 9000

pour voir si un tel port existe et j'ai obtenu ceci:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Mais comment puis-je obtenir le PID du processus qui le détient?

427
wuchang

Sous Linux, vous devez être root ou propriétaire du processus pour obtenir les informations souhaitées. En tant que tel, pour les processus exécutés en tant qu'un autre utilisateur, le préfixe Sudo est le plus important dont vous avez besoin. De plus, sur les systèmes Linux modernes, ss est un outil à utiliser pour ce faire:

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

Vous pouvez également utiliser la même invocation que vous utilisez actuellement, mais n'oubliez pas de Sudo:

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

Vous pouvez également utiliser 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

Vous pouvez également utiliser l'utilitaire lsof. Besoin d'être 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)
143
Vitaliy

J'utilise "CentOS 7 minimal" qui n'a ni netstat ni lsof. Mais beaucoup de distributions linux ont la commande socket statistics (c'est-à-dire ss).

Voici un exemple d'exécution:

# ss -tanp | grep 6379
LISTEN   0    128  127.0.0.1:6379   *:*   users:(("redis-server",pid=2531,fd=4))
14
Oleksandr

L'exécution de la commande avec Sudo vous donnerait PID. Sur ma machine de développement, je reçois:

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

$ Sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/Java

Et comme mentionné dans d'autres réponses, vous pouvez également utiliser les commandes ss ou lsof.

12
isapir

Vous pouvez également utiliser fuser:

fuser -v -n tcp 22

Le résultat :

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