Jag installerar hadoop på mitt Ubuntu-system. När jag startar det rapporterar det att port 9000 är upptagen.

Jag använde:

netstat -nlp|grep 9000 

för att se om en sådan port finns och Jag fick det här:

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

Men hur kan jag få PID för processen som håller den?

Kommentarer

Svar

På Linux måste du vara root eller ägare till processen för att få den information du önskar. Som sådan, för processer som körs som en annan användare, är det mesta av vad du behöver att förbereda sudo. Dessutom är ss moderna Linux-verktyg för att göra detta:

$ 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 också använda samma anrop som du för närvarande använder, men kom ihåg att sudo:

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

Du kan också använd lsof:

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

Kommentarer

  • Obs! Under OSX är -p alternativet är för protokoll snarare än process. Se den här frågan
  • @BryanP OP frågade efter Ubuntu så att ' s ganska irrelevant …
  • @AdamB Såvida inte en Mac-användare kom hit och letade efter Finding the PID of the process using a specific port
  • Detta svar skulle troligen förbättras genom att sätta behovet av att sudo överst.
  • @MrOnyancha Använd korta (-t) alternativ – lsof -ti tcp:80

Svar

Du kan också använda lsof util det är. Måste vara rot.

# 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

  • Detta kommando ger dig också processer med established anslutningar, inte bara processer som är listening.
  • Inte nödvändigtvis för att vara rot. Och för dem som bara vill få PID kan du lsof -i :25 -Fp, vilket ger utdata som p1234.

Svar

Jag använder ”CentOS 7 minimal” som inte har eller netstat varken lsof. Men många Linux-distributioner har kommandot socketstatistik (dvs. ss).

Här är ett exempel på körning:

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

Kommentarer

  • Se även ss -pntl 'sport = :6379'

Svar

Du kan också använda fuser:

fuser -v -n tcp 22 

Utgången:

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

Kommentarer

  • Det är inte ' t fungerar fuser -v -n tcp 80 , även jag försöker med sudo
  • Obs! Detta kräver sudo om den kränkande processen också startades med sudo
  • Detta är en bra sak att komma ihåg generellt. Kommandon i Linux vanligtvis ' t ger information om processer som startas av root / sudo såvida inte kommandot körs med Sudo. Detta gäller även när kommandot normalt inte behöver sudo för att köras korrekt.

Svar

Kör kommandot med sudo skulle ge dig PID. På min utvecklingsmaskin får jag:

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

Och som nämnts i andra svar kan du också använda ss eller kommandona lsof.

Kommentarer

  • körkommando som sudo visa process-ID
  • Men vad händer om sudo netstat -nlp | grep 34157 fortfarande visar - istället för PID?

Svar

Jag jobbar på ett Yocto Linux-system som har en begränsad uppsättning tillgängliga Linux-verktyg. Jag lyckades hitta processen för en körande port med följande kommandon (där jag hittar processen med 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 ovan är det programmet /usr/sbin/mosquitto som använder port 1883.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *