Apa yang akan Anda gunakan sebagai alternatif “fuser -v -n tcp” di Mac OS X

10

Perintah fuser pada Mac OS X agak primitif dan tidak dapat memeriksa proses mendengarkan pada port tertentu. Adakah yang tahu alternatif yang baik? Cukup mengetahui proses mendengarkan pada satu port itu.

Martin
sumber
1
Cobasudo lsof -i -P
vcsjones
Saya mendapat kesan bahwa lsof` hanya berfungsi ketika sebuah tugas benar-benar terhubung ke port. Selain itu orang akan membutuhkan setidaknya | grep portnojuga untuk mendapatkan hasil yang bermakna.
Martin

Jawaban:

13

Seperti yang dikatakan @vcsjones dalam komentar, lsofadalah alat untuk ini:

$ sudo lsof -i tcp:80
COMMAND PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
Safari  804 gordon   16u  IPv4 0x05a2cec8      0t0  TCP 192.168.6.3:50542->stackoverflow.com:http (ESTABLISHED)
httpd   874   root    3u  IPv6 0x05a2a940      0t0  TCP *:http (LISTEN)
httpd   878   _www    3u  IPv6 0x05a2a940      0t0  TCP *:http (LISTEN)

Tanpa -iitu, itu menunjukkan semua file yang terbuka; hanya -imenampilkan file jaringan saja; jika Anda menentukan sesuatu setelah -iAnda dapat membatasi oleh salah satu atau semua: IPv4 / 6, TCP / UDP, nama host atau IP, dan nomor port / nama layanan.

Gordon Davisson
sumber
2
Kalau-kalau itu berguna untuk seseorang seperti saya yang ingin membabi buta membunuh semua proses menggunakan port yang diberikan: lsof -i tcp:5000 | grep LISTEN | awk '{print $2}' | xargs killmembunuh semua proses mendengarkan pada port 5000
JeremyKun