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é jsou listening.
  • 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 jako p1234.

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *