Jeg installerer hadoop på mitt Ubuntu-system. Når jeg starter den, rapporterer den at port 9000 er opptatt.

Jeg brukte:

netstat -nlp|grep 9000 

for å se om en slik port eksisterer og Jeg fikk dette:

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

Men hvordan kan jeg få PID for prosessen som holder den?

Kommentarer

Svar

På Linux må du være root eller eier av prosessen for å få den informasjonen du ønsker. Som sådan, for prosesser som kjører som en annen bruker, er det mest av det du trenger å forutse sudo. I tillegg til det, på moderne Linux-systemer, er ss verktøy for å gjø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)) 

Du kan også bruke samme påkallelse som du bruker for øyeblikket, men husk å sudo:

$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx 

Du kan også bruk lsof:

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

Kommentarer

  • Merk: under OSX er -p alternativet er for protokoll i stedet for prosess. Se dette spørsmålet
  • @BryanP OP-en ba om Ubuntu slik at ' er ganske irrelevant …
  • @AdamB Med mindre en Mac-bruker ankom hit og lette etter Finding the PID of the process using a specific port
  • Dette svaret vil sannsynligvis forbedres ved å sette behovet for sudo øverst.
  • @MrOnyancha Bruk kortfattede (-t) alternativene – lsof -ti tcp:80

Svar

Du kan også bruke lsof util ity. Må være 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) 

Kommentarer

  • Denne kommandoen gir deg også prosesser med established forbindelser, ikke bare prosesser som er listening.
  • Ikke nødvendigvis å være rot. Og for de som bare ønsker å få PID, kan du lsof -i :25 -Fp, som gir produksjon som p1234.

Svar

Jeg bruker «CentOS 7 minimal» som ikke har netstat verken lsof. Men mange linux-distribusjoner har kommandoen socket statistikk (dvs. ss).

Her er et eksempel på utfø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å bruke fuser:

fuser -v -n tcp 22 

Utgangen:

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

Kommentarer

  • Det gjør det ikke ' t fungerer fuser -v -n tcp 80 , selv jeg prøver med sudo
  • Merk: Dette krever sudo hvis den krenkende prosessen også ble startet med sudo
  • Dette er en god ting å huske generelt. Kommandoer i Linux vant ' t informasjon om prosesser startet av root / sudo med mindre kommandoen kjøres med Sudo. Dette gjelder selv når kommandoen normalt ikke trenger sudo for å kjøre riktig.

Svar

Kjører kommandoen med sudo vil gi deg PID. På utviklingsmaskinen min 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 nevnt i andre svar kan du også bruke ss eller lsof -kommandoene.

Kommentarer

  • løpende kommando som sudo visningsprosess-ID
  • Men hva om sudo netstat -nlp | grep 34157 fremdeles viser - i stedet for PID?

Svar

Jeg jobber med et Yocto Linux-system som har et begrenset sett med tilgjengelige Linux-verktøy. Jeg klarte å finne prosessen med en port som kjører ved hjelp av følgende kommandoer (der jeg finner prosessen ved hjelp av 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 som bruker port 1883.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *