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 sontlistening
. - Pas nécessairement être root. Et, pour ceux qui souhaitent obtenir uniquement le PID, vous pouvez
lsof -i :25 -Fp
, qui produit une sortie commep1234
.
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é avecsudo
- 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.
netstat
peut fonctionner dans de nombreux systèmes dexploitation pour vous permettre de lobtenir, il vous suffit de trouver les arguments qui garantiront quelle affichera les pids le long de chaque port ouvert connu.