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 er listening.
  • 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 som p1234.

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 med sudo
  • 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *