Jeg installerer hadoop på mit Ubuntu-system. Når jeg starter det, rapporterer det, at port 9000 er optaget.
Jeg brugte:
netstat -nlp|grep 9000
for at se, om en sådan port findes, og Jeg fik dette:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Men hvordan kan jeg få PID for den proces, der holder den?
Kommentarer
Svar
På Linux skal du være root eller ejer af processen for at få de oplysninger, du ønsker. Som sådan er processer, der kører som en anden bruger, det mest af det, du har brug for, forud for sudo
. Derudover er ss
på moderne Linux-systemer værktøj til at gøre dette:
$ 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))
Dig kan også bruge den samme påkaldelse, som du bruger i øjeblikket, men husk at sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
Du kan også brug lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Kommentarer
- Bemærk: under OSX er
-p
-indstillingen er til protokol snarere end til proces. Se dette spørgsmål - @BryanP OPen bad om Ubuntu, så ' s lidt irrelevant …
- @AdamB Medmindre en Mac-bruger ankom her og søger efter
Finding the PID of the process using a specific port
- Dette svar ville sandsynligvis blive forbedret ved at sætte behovet for
sudo
øverst. - @MrOnyancha Brug kortfattede (-t) muligheder –
lsof -ti tcp:80
Svar
Du kan også bruge lsof
util det er. Skal være rod.
# 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)
Kommentarer
- Denne kommando giver dig også processer med
established
forbindelser, ikke kun processer, der erlistening
. - Ikke nødvendigvis at være rod. Og for dem, der kun ønsker at få PID, kan du
lsof -i :25 -Fp
, hvilket producerer output somp1234
.
Svar
Jeg bruger “CentOS 7 minimal”, som hverken har netstat
lsof
. Men mange Linux-distributioner har kommandoen socket statistik (dvs. ss
).
Her er et eksempel på udførelse:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Kommentarer
- Se også
ss -pntl 'sport = :6379'
Svar
Du kan også bruge fuser
:
fuser -v -n tcp 22
Outputtet:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Kommentarer
- Det er ikke ' t arbejder fuser -v -n tcp 80 , selv jeg prøver med sudo
- Bemærk: Dette kræver
sudo
hvis den fornærmende proces også blev startet medsudo
- Dette er en god ting at huske generelt. Kommandoer i Linux vandt generelt ikke ' t information om processer startet af root / sudo, medmindre kommandoen køres med Sudo. Dette gælder også når kommandoen normalt ikke har brug for sudo for at køre korrekt.
Svar
Kørsel af kommandoen med sudo
giver dig PID
. På min udviklingsmaskine får jeg:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
Og som nævnt i andre svar kan du også bruge ss
eller kommandoerne lsof
.
Kommentarer
- kørende kommando som
sudo
visningsproces-id - Men hvad hvis
sudo netstat -nlp | grep 34157
stadig viser-
i stedet for PID?
Svar
Jeg arbejder på et Yocto Linux-system, der har et begrænset sæt tilgængelige Linux-værktøjer. Det lykkedes mig at finde processen med en kørende port ved hjælp af følgende kommandoer (hvor jeg finder processen ved hjælp af 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
Som vi kan se ovenfor, er det programmet /usr/sbin/mosquitto
det bruger port 1883.
netstat
kommando fungerer muligvis i mange operationelle systemer, så du får det, du skal bare finde de argumenter, der vil sikre, at det viser pids langs hver kendt åbnet port.