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 ärlistening
. - 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 somp1234
.
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 medsudo
- 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.
netstat
-kommandot kan fungera i många operationssystem så att du får det, du måste bara hitta argumenten som säkerställer att det kommer att visa pids längs varje känd öppnad port.