Ich installiere Hadoop auf meinem Ubuntu-System. Wenn ich es starte, wird gemeldet, dass Port 9000 belegt ist.
Ich habe Folgendes verwendet:
netstat -nlp|grep 9000
, um festzustellen, ob ein solcher Port vorhanden ist und Ich habe Folgendes erhalten:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Aber wie kann ich die PID des Prozesses ermitteln, der sie enthält?
Kommentare
- Siehe wilddiary.com/find-the-process-using-a-given-port
- Beantwortet auf SU – Suchen des Prozesses, der einen bestimmten Port unter Linux verwendet
-
netstat
funktioniert möglicherweise in vielen Betriebssystemen, damit Sie dies erhalten. Sie müssen nur die Argumente finden, die sicherstellen, dass Pids entlang jedes bekannten geöffneten Ports angezeigt werden.
Antwort
Unter Linux müssen Sie root oder der Eigentümer des Prozesses sein, um die gewünschten Informationen zu erhalten. Daher ist für Prozesse, die als ein anderer Benutzer ausgeführt werden, das Voranstellen von sudo
das meiste, was Sie benötigen. Darüber hinaus ist auf modernen Linux-Systemen ss
das Werkzeug, um dies zu tun:
$ 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))
Sie Sie können auch denselben Aufruf verwenden, den Sie gerade verwenden, aber denken Sie daran, sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
Sie können dies auch Verwenden Sie lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Kommentare
- Hinweis: Unter OSX ist die bezieht sich eher auf das Protokoll als auf den Prozess. Siehe diese Frage
- @BryanP Das OP hat nach Ubuntu gefragt, damit ' ist irgendwie irrelevant …
- @AdamB Es sei denn, ein Mac-Benutzer ist hier angekommen und hat nach
Finding the PID of the process using a specific port
- Diese Antwort würde wahrscheinlich verbessert, wenn
sudo
oben angezeigt wird. - @MrOnyancha Verwenden Sie die knappen (-t) Optionen –
lsof -ti tcp:80
gesucht
Antwort
Sie können auch util ity. Muss root sein.
# 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)
Kommentare
- Mit diesem Befehl erhalten Sie auch Prozesse mit
established
Verbindungen, nicht nur Prozesse, dielistening
sind. - Nicht unbedingt root sein. Und für diejenigen, die nur PID erhalten möchten, können Sie
lsof -i :25 -Fp
verwenden, wodurch eine Ausgabe wiep1234
erzeugt wird.
Antwort
Ich verwende „CentOS 7 minimal“, das weder netstat
noch lsof
. Viele Linux-Distributionen haben jedoch den Befehl socket statistics (dh ss
).
Hier ist ein Beispiel für die Ausführung:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Kommentare
- Siehe auch
ss -pntl 'sport = :6379'
Antwort
Sie können auch fuser
verwenden:
fuser -v -n tcp 22
Die Ausgabe:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Kommentare
- Es gibt keine ' funktioniert nicht Fixiereinheit -v -n tcp 80 , auch ich versuche es mit sudo
- Hinweis: Dies erfordert
sudo
wenn der fehlerhafte Prozess auch mitsudo
- gestartet wurde. Dies ist eine gute Sache, an die Sie sich im Allgemeinen erinnern sollten. Befehle unter Linux geben im Allgemeinen ' keine Informationen zu Prozessen, die von root / sudo gestartet wurden, es sei denn, der Befehl wird mit Sudo ausgeführt. Dies gilt auch dann, wenn der Befehl normalerweise kein sudo benötigt, um korrekt ausgeführt zu werden.
Antwort
Ausführen des Befehls mit sudo
erhalten Sie die PID
. Auf meinem Entwicklungscomputer wird Folgendes angezeigt:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
Wie in anderen Antworten erwähnt, können Sie auch ss
oder verwenden die Befehle lsof
.
Kommentare
Antwort
Ich arbeite an einem Yocto Linux-System mit einer begrenzten Anzahl verfügbarer Linux-Tools. Ich habe es geschafft, es zu finden Der Prozess eines laufenden Ports mit den folgenden Befehlen (wobei ich den Prozess mit Port 1883 finde):
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
Wie wir oben sehen können, verwendet das Programm /usr/sbin/mosquitto
Port 1883.
sudo
Prozess-ID anzeigensudo netstat -nlp | grep 34157
weiterhin-
anstelle von PID anzeigt?