Ik installeer hadoop op mijn Ubuntu-systeem. Als ik het start, meldt het dat poort 9000 bezet is.

Ik gebruikte:

netstat -nlp|grep 9000 

om te zien of zon poort bestaat en Ik heb dit:

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

Maar hoe kan ik de PID krijgen van het proces dat het vasthoudt?

Opmerkingen

Answer

Op Linux moet je root zijn of de eigenaar van het proces om de informatie te krijgen die je wenst. Voor processen die als een andere gebruiker worden uitgevoerd, is het dus het meest nodig om sudo te plaatsen. Daarnaast is op moderne Linux-systemen ss een hulpmiddel om dit te doen:

$ 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)) 

kan ook dezelfde aanroep gebruiken die u momenteel gebruikt, maar vergeet niet sudo:

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

U kunt ook gebruik lsof:

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

Reacties

  • Opmerking: onder OSX, de -p optie is voor protocol in plaats van proces. Zie deze vraag
  • @BryanP het OP vroeg om Ubuntu zodat ' is nogal irrelevant …
  • @AdamB Tenzij een Mac-gebruiker hier arriveerde op zoek naar Finding the PID of the process using a specific port
  • Dit antwoord zou waarschijnlijk worden verbeterd door de noodzaak sudo bovenaan te plaatsen.
  • @MrOnyancha Gebruik de beknopte (-t) opties – lsof -ti tcp:80

Antwoord

U kunt ook util ity. Moet root zijn.

# 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) 

Reacties

  • Deze opdracht geeft je ook processen met established verbindingen, niet alleen processen die listening zijn.
  • Dit hoeven niet noodzakelijk root te zijn. En voor degenen die alleen PID willen krijgen, kun je lsof -i :25 -Fp, wat output produceert als p1234.

Antwoord

Ik gebruik “CentOS 7 minimal” die noch netstat noch lsof. Maar veel Linux-distributies hebben het socket Statistics-commando (dwz ss).

Hier is een voorbeeld van uitvoering:

# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4)) 

Reacties

  • Zie ook ss -pntl 'sport = :6379'

Answer

U kunt ook fuser gebruiken:

fuser -v -n tcp 22 

De uitvoer:

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

Reacties

  • Het heeft geen ' t werkt fuser -v -n tcp 80 , zelfs ik probeer het met sudo
  • Opmerking: dit vereist sudo als het aanstootgevende proces ook werd gestart met sudo
  • Dit is in het algemeen goed om te onthouden. Commandos in Linux zullen over het algemeen ' geen informatie geven over processen die gestart zijn door root / sudo, tenzij het commando wordt uitgevoerd met Sudo. Dit is zelfs het geval als het commando sudo normaal gesproken niet nodig heeft om correct uit te voeren.

Answer

Het commando uitvoeren met sudo zou je de PID geven. Op mijn ontwikkelmachine krijg ik:

$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java 

En zoals vermeld in andere antwoorden kun je ook de ss of de lsof commandos.

Reacties

  • uitvoeren van commando als sudo proces-ID weergeven
  • Maar wat als sudo netstat -nlp | grep 34157 nog steeds - weergeeft in plaats van PID?

Answer

Ik werk aan een Yocto Linux-systeem dat een beperkte set beschikbare Linux-tools heeft. Ik heb het proces van een actieve poort met behulp van de volgende opdrachten (waar ik het proces vind met poort 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  

Zoals we hierboven kunnen zien, is het het programma /usr/sbin/mosquitto dat poort 1883 gebruikt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *