Belirli bir bağlantı noktasını kullanarak işlemin PID'sini bulma?


391

Ubuntu sistemime hadoop yüklüyorum. Başlattığımda, 9000 numaralı bağlantı noktasının meşgul olduğunu bildirdi.

Kullandım:

netstat -nlp|grep 9000

böyle bir limanın var olup olmadığını görmek için şunu aldım:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Fakat onu tutan sürecin PID'sini nasıl alabilirim?




netstatkomutu birçok işletim sisteminde çalışmanıza izin verebilir, bildiğiniz her açılan port boyunca çukurlar göstermesini sağlayacak argümanları bulmanız yeterlidir.
Luciano

Yanıtlar:


474

Linux'ta, istediğiniz bilgiyi alabilmek için kök veya sürecin sahibi olmanız gerekir. Bu nedenle, başka bir kullanıcı olarak çalışan işlemler için, hazırlık sudoyapmak ihtiyacınız olanın çoğu. Buna ek olarak, modern Linux sistemlerinde, ssbunu yapmak için kullanılacak bir araçtır:

$ 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))

Aynı zamanda şu anda kullanmakta olduğunuz çağrıyı da kullanabilirsiniz, ancak şunu unutmayın sudo:

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

Ayrıca lsof kullanabilirsiniz:

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

36
Not: OSX altında, -pseçenek işlem yerine protokol içindir. Bu soruya
Bryan P

3
OPP @BryanP'den Ubuntu istedi, bu biraz alakasız ...
Adam B

43
@AdamB Mac kullanıcısı aramaya Finding the PID of the process using a specific port
gelmediyse

2
Bu cevap muhtemelen sudoen üste ihtiyaç duyularak iyileştirilecektir .
Nacht

2
@MrOnyancha Vane (-t) seçeneklerini kullanın -lsof -ti tcp:80
Mohnish

138

Ayrıca lsofyardımcı programını kullanabilirsiniz . Kök olması gerekir.

# 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)

9
Bu komut size establishedyalnızca süreçleri değil , bağlantıları olan işlemleri de verir listening.
firelynx

1
Mutlaka kök olmak zorunda değil. Ve sadece PID almak isteyenler için lsof -i :25 -Fp, bunun gibi bir çıktı üreten yapabilirsiniz p1234.
Robert

12

Ne de netstatne de "CentOS 7 minimal" kullanıyorum lsof. Ancak birçok linux dağıtımı soket istatistik komutuna (yani ss) sahiptir.

İşte yürütme örneği:

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

1
Ayrıca bakınızss -pntl 'sport = :6379'
Stéphane Chazelas

10

Komutla birlikte çalıştırmak sudosize yardımcı olacaktır PID. Geliştirme makinemde şunu alıyorum:

$ netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      -

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

Diğer cevaplarda da belirtildiği gibi ss, lsofkomutları da kullanabilirsiniz .


sudogörüntüleme işlemi kimliği olarak çalışan komutu
Eugen Konkov

Peki ya PID yerine sudo netstat -nlp | grep 34157hala görüntüleniyorsa -?
Eugen Konkov

8

Ayrıca şunları da kullanabilirsiniz fuser:

fuser -v -n tcp 22

Çıktı :

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

Bu çalışma yok Füzerin -v -n tcp 80 , hatta ben sudo ile deneyin
SuperKrish

1
Not: Bu sudo, rahatsız edici sürece de başlatılmışsa gerektirirsudo
laggingreflex,

1
Bu genel olarak hatırlamak için iyi bir şey. Linux'taki komutlar genellikle komut Sudo ile çalıştırılmadıkça root / sudo tarafından başlatılan işlemler hakkında bilgi vermez. Bu, normalde komutun doğru çalışması için sudo'ya ihtiyaç duymaması durumunda bile geçerlidir.
njfife
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.