Instaluji hadoop do svého systému Ubuntu. Když to spustím, hlásí, že port 9000 je zaneprázdněn.
Použil jsem:
netstat -nlp|grep 9000
, abych zjistil, zda takový port existuje a Mám toto:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Jak ale mohu získat PID procesu, který jej drží?
Komentáře
Odpověď
V systému Linux musíte být root nebo vlastník procesu, abyste získali požadované informace. Pro procesy běžící jako jiný uživatel je tedy většina z toho, co potřebujete, prepending sudo
. Kromě toho je v moderních systémech Linux nástroj ss
, který lze použít:
$ 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))
Vy můžete také použít stejné vyvolání, jaké aktuálně používáte, ale nezapomeňte sudo
:
$ sudo netstat -nlp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
Můžete také použijte lsof:
$ sudo lsof -n -i :80 | grep LISTEN nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Komentáře
- Poznámka: v OSX je
-p
volba je spíše pro protokol než pro proces. Viz tuto otázku - @BryanP OP požádal OP o Ubuntu, takže ' s trochu irelevantní …
- @AdamB Pokud sem nepřišel uživatel systému Mac, který hledá
Finding the PID of the process using a specific port
- Tato odpověď by se pravděpodobně vylepšila, kdyby byla potřeba
sudo
nahoře. - @MrOnyancha Použijte možnosti terse (-t) –
lsof -ti tcp:80
odpověď
Můžete také použít lsof
využití dobře. Musíte být 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)
Komentáře
- Tento příkaz vám také poskytne procesy s
established
připojení, nejen procesy, které jsoulistening
. - nemusí být nutně root. A pro ty, kteří chtějí získat pouze PID, můžete
lsof -i :25 -Fp
, který produkuje výstup jakop1234
.
Odpověď
Používám „CentOS 7 minimal“, který nemá ani netstat
ani lsof
. Ale mnoho linuxových distribucí má příkaz socket statistics (tj. ss
).
Zde je příklad provedení:
# ss -tanp | grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Komentáře
- Viz také
ss -pntl 'sport = :6379'
Odpověď
Můžete také použít fuser
:
fuser -v -n tcp 22
Výstup:
USER PID ACCESS COMMAND 22/tcp: root 598 F.... sshd
Komentáře
- Ne ' nefunguje fuser -v -n tcp 80 , i když to zkusím se sudo
- Poznámka: To vyžaduje
sudo
pokud byl proces porušování zákona zahájen také pomocísudo
- je dobré si to obecně pamatovat. Příkazy v Linuxu obvykle ' neposkytují informace o procesech spuštěných root / sudo, pokud příkaz není spuštěn se Sudo. To platí, i když příkaz ke správnému spuštění normálně nepotřebuje sudo.
Odpověď
Spuštění příkazu s sudo
vám poskytne PID
. Na svém vývojovém stroji dostanu:
$ netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN - $ sudo netstat -nlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16449/java
A jak je uvedeno v dalších odpovědích, můžete také použít ss
nebo lsof
příkazy.
Komentáře
- spuštěný příkaz jako
sudo
zobrazit ID procesu - Ale co když
sudo netstat -nlp | grep 34157
stále zobrazuje-
místo PID?
Odpověď
Pracuji na systému Yocto Linux, který má omezenou sadu dostupných nástrojů pro Linux. Podařilo se mi najít proces běžícího portu pomocí následujících příkazů (kde najdu proces pomocí portu 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
Jak vidíme výše, jedná se o program /usr/sbin/mosquitto
, který používá port 1883.
netstat
může fungovat v mnoha operačních systémech, aby vám to umožnil, stačí najít argumenty, které zajistí, že bude zobrazovat pidy podél každého známého otevřeného portu.