Menemukan PID proses menggunakan port tertentu?


392

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?




netstatperintah mungkin bekerja di banyak sistem operasi untuk memungkinkan Anda mendapatkannya, Anda hanya perlu menemukan argumen yang akan memastikan itu akan menunjukkan pids di sepanjang setiap port yang dikenal terbuka.
Luciano

Jawaban:


474

Di Linux, Anda harus menjadi root atau pemilik proses untuk mendapatkan informasi yang Anda inginkan. Dengan demikian, untuk proses yang berjalan sebagai pengguna lain, prapembuatan sudoadalah yang paling Anda butuhkan. Selain itu, pada sistem Linux modern, ssadalah 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)

36
Catatan: di bawah OSX, -popsinya adalah untuk protokol daripada proses. Lihat pertanyaan ini
Bryan P

3
@BryanP OP meminta Ubuntu jadi itu agak tidak relevan ...
Adam B

43
@ AdamB Kecuali seorang pengguna Mac tiba di sini mencariFinding the PID of the process using a specific port
mraaroncruz

2
Jawaban ini mungkin akan ditingkatkan dengan menempatkan kebutuhan sudodi atas.
Nacht

2
@MrOnyancha Gunakan opsi terse (-t) -lsof -ti tcp:80
Mohnish

138

Anda juga dapat menggunakan lsofutilitas. 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)

9
Perintah ini juga akan memberi Anda proses dengan establishedkoneksi, bukan hanya proses yang ada listening.
firelynx

1
Belum tentu menjadi root. Dan, bagi mereka yang ingin mendapatkan PID saja, Anda bisa lsof -i :25 -Fp, yang menghasilkan output seperti p1234.
Robert

12

Saya menggunakan "CentOS 7 minimal" yang tidak memiliki netstatkeduanya lsof. Tetapi banyak distribusi linux memiliki perintah statistik socket (yaitu ss).

Berikut ini contoh eksekusi:

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

1
Lihat jugass -pntl 'sport = :6379'
Stéphane Chazelas

10

Menjalankan perintah dengan sudoakan 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 yang disebutkan dalam jawaban lain Anda juga dapat menggunakan perintah ssatau lsof.


menjalankan perintah sebagai sudoID proses tampilan
Eugen Konkov

Tetapi bagaimana jika sudo netstat -nlp | grep 34157masih menampilkan -bukan PID?
Eugen Konkov

8

Anda juga dapat menggunakan fuser:

fuser -v -n tcp 22

Hasil :

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

Ini tidak berfungsi fuser -v -n tcp 80 , bahkan saya coba dengan sudo
SuperKrish

1
Catatan: Ini mengharuskan sudojika proses pelanggaran juga dimulai dengansudo
laggingreflex

1
Ini adalah hal yang baik untuk diingat secara umum. Perintah di Linux umumnya tidak akan memberikan informasi tentang proses yang dimulai oleh root / sudo kecuali perintah dijalankan dengan Sudo. Ini benar bahkan ketika perintah biasanya tidak perlu sudo untuk berjalan dengan benar.
njfife
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.