Jinstalle hadoop sur mon système Ubuntu. Quand je le démarre, il signale que le port 9000 est occupé.

Jai utilisé:

netstat -nlp|grep 9000 

pour voir si un tel port existe et Jai 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 contient?

Commentaires

Réponse

Sous Linux, vous devez être root ou le propriétaire du processus pour obtenir les informations que vous désirez. En tant que tel, pour les processus sexécutant en tant quautre utilisateur, le préfixe sudo est lessentiel de ce dont vous avez besoin. En plus de cela, 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 peut également utiliser la même invocation que vous « utilisez actuellement, mais noubliez 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 utilisez lsof:

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

Commentaires

  • Remarque: sous OSX, le -p est pour le protocole plutôt que pour le processus. Voir cette question
  • @BryanP lOP a demandé Ubuntu afin que ' est un peu hors de propos …
  • @AdamB Sauf si un utilisateur Mac est arrivé ici à la recherche de Finding the PID of the process using a specific port
  • Cette réponse serait probablement améliorée en mettant la nécessité de sudo en haut.
  • @MrOnyancha Utilisez les options concises (-t) – lsof -ti tcp:80

Réponse

Vous pouvez également utiliser lsof util ité. Il faut ê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) 

Commentaires

  • Cette commande vous donnera également des processus avec established, pas seulement des processus qui sont listening.
  • Pas nécessairement être root. Et, pour ceux qui souhaitent obtenir uniquement le PID, vous pouvez lsof -i :25 -Fp, qui produit une sortie comme p1234.

Réponse

Jutilise « CentOS 7 minimal » qui na ni netstat ni lsof. Mais beaucoup de distributions Linux ont la commande socket statistics (cest-à-dire ss).

Voici un exemple dexécution:

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

Commentaires

  • Voir aussi ss -pntl 'sport = :6379'

Réponse

Vous pouvez également utiliser fuser:

fuser -v -n tcp 22 

Le résultat:

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

Commentaires

  • Il ne ' t fonctionne fuser -v -n tcp 80 , même si jessaye avec sudo
  • Remarque: Cela nécessite sudo si le processus incriminé a également démarré avec sudo
  • Cest une bonne chose à retenir en général. Les commandes sous Linux ne donnent généralement pas ' des informations sur les processus lancés par root / sudo à moins que la commande ne soit exécutée avec Sudo. Cela est vrai même lorsque la commande na normalement pas besoin de sudo pour sexécuter correctement.

Réponse

Exécution de la commande avec sudo vous donnerait le PID. Sur ma machine de développement, jobtiens:

$ 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 dautres réponses, vous pouvez également utiliser ss ou les commandes lsof.

Commentaires

  • exécution de la commande en tant que sudo afficher lID du processus
  • Mais que se passe-t-il si sudo netstat -nlp | grep 34157 affiche toujours - au lieu du PID?

Réponse

Je travaille sur un système Yocto Linux qui dispose dun ensemble limité doutils Linux disponibles. Jai réussi à trouver le processus dun port en cours dexécution à laide des commandes suivantes (où je trouve le processus utilisant le port 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  

Comme nous pouvons le voir ci-dessus, cest le programme /usr/sbin/mosquitto qui « utilise le port 1883.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *