Instalez hadoop pe sistemul meu Ubuntu. Când îl pornesc, raportează că portul 9000 este ocupat.
Am folosit:
netstat -nlp|grep 9000
pentru a vedea dacă există un astfel de port și Am primit acest lucru:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Dar cum pot obține PID-ul procesului care îl ține?
Comentarii
Răspuns
Pe Linux, trebuie să fiți root sau proprietar al procesului pentru a obține informațiile dorite. Ca atare, pentru procesele care rulează ca un alt utilizator, preponderent sudo
este cea mai mare parte din ceea ce aveți nevoie. În plus, pe sistemele Linux moderne, ss
este instrumentul de utilizat pentru a face acest lucru:
$ 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))
puteți utiliza, de asemenea, aceeași invocație pe care o utilizați în prezent, dar nu uitați să sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
De asemenea, puteți utilizați lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Comentarii
- Notă: în OSX, este mai degrabă pentru protocol decât pentru proces. Consultați această întrebare
- @BryanP OP a cerut Ubuntu pentru ca ' e cam irelevant …
- @AdamB Cu excepția cazului în care un utilizator Mac a sosit aici în căutarea
Finding the PID of the process using a specific port
- Acest răspuns ar fi probabil îmbunătățit punând nevoia de a
sudo
în partea de sus. - @MrOnyancha Utilizați opțiunile terse (-t) –
lsof -ti tcp:80
Răspuns
De asemenea, puteți utiliza lsof
util ity. Trebuie să fie 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)
Comentarii
- Această comandă vă va oferi și procese cu
established
conexiuni, nu doar procese care suntlistening
. - Nu trebuie neapărat să fie root. Și, pentru cei care doresc să obțină numai PID, puteți
lsof -i :25 -Fp
, care produce rezultate precump1234
.
Răspuns
Folosesc „CentOS 7 minimal” care nu are nici netstat
nici lsof
. Dar o mulțime de distribuții Linux au comanda statistică socket (adică ss
).
Iată un exemplu de execuție:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Comentarii
- Vezi și
ss -pntl 'sport = :6379'
Răspuns
De asemenea, puteți utiliza fuser
:
fuser -v -n tcp 22
Rezultatul:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Comentarii
- Nu ' nu funcționează fuser -v -n tcp 80 , chiar și eu încerc cu sudo
- Notă: Acest lucru necesită
sudo
dacă procesul ofensator a fost de asemenea început cusudo
- Acesta este un lucru bun de reținut în general. Comenzile din Linux, în general, nu câștigă ' pentru a oferi informații despre procesele începute de root / sudo, cu excepția cazului în care comanda este executată cu Sudo. Acest lucru este adevărat chiar și atunci când comanda nu are nevoie în mod normal de sudo pentru a rula corect.
Răspuns
Rularea comenzii cu sudo
ți-ar da PID
. Pe computerul meu de dezvoltare primesc:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
Și așa cum am menționat în alte răspunsuri, puteți utiliza și ss
sau comenzile lsof
.
Comentarii
- executând comanda ca
sudo
ID proces de afișare - Dar dacă
sudo netstat -nlp | grep 34157
afișează în continuare-
în loc de PID?
Răspuns
Lucrez la un sistem Yocto Linux care are un set limitat de instrumente Linux disponibile. Am reușit să găsesc procesul unui port care rulează folosind următoarele comenzi (unde găsesc procesul care utilizează portul 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
După cum putem vedea mai sus, programul /usr/sbin/mosquitto
este cel care utilizează portul 1883.
netstat
ar putea funcționa în multe sisteme de operații pentru a vă permite să obțineți acest lucru, trebuie doar să găsiți argumentele care vă vor asigura că va afișa pids de-a lungul fiecărui port deschis cunoscut.