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 erlistening
. - Ikke nødvendigvis å være rot. Og for de som bare ønsker å få PID, kan du
lsof -i :25 -Fp
, som gir produksjon somp1234
.
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 medsudo
- 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.
netstat
-kommandoen kan fungere i mange operasjonssystemer for å tillate deg å få det, du må bare finne argumentene som vil sikre at det vil vise pids langs hver kjent åpnet port.