it-swarm-id.com

Menemukan PID proses menggunakan port tertentu?

Saya menginstal hadoop pada sistem Ubuntu saya. Ketika saya memulainya, ia melaporkan bahwa port 9000 sedang sibuk.

Saya menggunakan:

netstat -nlp|grep 9000

untuk melihat apakah port tersebut ada dan saya mendapatkan ini:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

Tetapi bagaimana saya bisa mendapatkan PID dari proses yang menahannya?

427
wuchang

Di Linux, Anda harus menjadi root atau pemilik proses untuk mendapatkan informasi yang Anda inginkan. Karena itu, untuk proses yang berjalan sebagai pengguna lain, prapeningkatan Sudo adalah yang paling Anda butuhkan. Selain itu, pada sistem Linux modern, ss adalah alat yang digunakan untuk melakukan ini:

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

Anda juga dapat menggunakan doa yang sama dengan yang Anda gunakan saat ini, tetapi ingat untuk Sudo:

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

Anda juga dapat menggunakan lsof:

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

Anda juga dapat menggunakan utilitas lsof. Perlu di-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)
143
Vitaliy

Saya menggunakan "CentOS 7 minimal" yang tidak memiliki netstat tidak lsof. Tetapi banyak distribusi linux memiliki perintah statistic socket (mis. ss).

Berikut ini contoh eksekusi:

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

Menjalankan perintah dengan Sudo akan memberi Anda PID. Di mesin pengembangan saya, saya mendapatkan:

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

$ Sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/Java

Dan seperti disebutkan dalam jawaban lain, Anda juga dapat menggunakan perintah ss atau lsof.

12
isapir

Anda juga dapat menggunakan fuser:

fuser -v -n tcp 22

Hasil :

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