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 dielistening
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 alsp1234
.
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 metsudo
- 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.
netstat
zou in veel besturingssystemen kunnen werken om dat mogelijk te maken, je hoeft alleen maar de argumenten te vinden die ervoor zorgen dat het pids laat zien langs elke bekende geopende poort.