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 sunt listening.
  • 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 precum p1234.

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 cu sudo
  • 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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *