Saya memiliki PID proses tertentu mendengarkan beberapa port pada OS X saya dan saya perlu tahu port mana yang didengarkan oleh proses ini. Bagaimana saya bisa melakukannya?
Saya tahu saya dapat menggunakan lsof
untuk mengetahui proses mana yang mendengarkan beberapa port, tetapi saya perlu melakukan operasi terbalik.
Terima kasih.
UPD
OS X menggunakan utils BSD, jadi saya punya BSD netstat
bukan Linux netstat
. Linux netstat
memiliki -p
opsi untuk menampilkan PID, BSD netstat
menggunakan -p
untuk menentukan port dan tidak memiliki opsi untuk menampilkan PID.
networking
osx
bsd
shau-kote
sumber
sumber
netstat
dapat melakukan ini untuk Anda. Anda dapatgrep
menggunakan PID jika Anda ingin memfilter output darinetstat
lsof
penggunaannya tidak hanya satu arah. Anda dapat melakukan sesuatu sepertilsof|grep ${PID}
. yang akan membuang semuanya dengan kasar dangrep
akan memilih garis dengan PID di dalamnya. Dalam kesempatan off, mungkin daftar garis yang tidak relevan, karena nomor PID keliru mencocokkan beberapa nilai lain tetapi kemungkinannya tipis untuk tidak adanetstat
tidak dapat menampilkan PID.Jawaban:
Saya telah menemukan solusi sendiri dengan membaca dalam-dalam
man lsof
. (Ya, RT * M masih membantu.) Terima kasih @Gilles untuk membidik.Inilah solusinya:
lsof -aPi -p 555
(555 adalah PID).Penjelasan:
-p
untuk menentukan nomor PID;-i
untuk hanya menampilkan perangkat jaringan;-a
ke DAN dua kondisi di atas (jika tidak mereka akan ORed);-P
untuk menampilkan nomor port (bukan nama port secara default).Selain itu, seseorang dapat menggunakan
lsof -aPi4 -p 555
atau hanyalsof -aPi6 -p 55
untuk alamat IPv4 atau IP6.Jika output akan diuraikan oleh
-Fn
opsi program lain mungkin dapat membantu. Dengan opsi inilsof
akan menghasilkan "output untuk program lain" bukannya output yang diformat bagus.lsof -aPi4 -Fn -p 555
akan menampilkan sesuatu seperti ini:PS Semua itu saya sudah diuji pada OS X El Capitan saya, tetapi seperti yang saya lihat itu harus bekerja di Linux juga.
sumber
lsof
memberikan informasi tentang file yang dibuka oleh proses, termasuk port jaringan. Ini tersedia di hampir semua sistem unix, termasuk OSX .The Rosetta Stone untuk Unix tidak mencantumkan alat lainnya untuk “proses pertandingan ke file atau port” di OSX.
Untuk daftar proses mendengarkan pada port TCP, Anda dapat menggunakan
lsof -iUDP
daftar proses yang memiliki soket UDP terbuka.lsof -i
mendaftar semua soket jaringan yang terbuka (klien TCP, server TCP, dan protokol IP lainnya).sumber
jika Anda ingin tahu port mana yang sedang mendengarkan Anda dapat menggunakan opsi -p netstat. Anda harus menjadi superuser:
jika Anda ingin tahu lebih banyak tentang hal ini, coba tautan ini
sumber
netstat
, saya memiliki OS X dan karenanya menggunakan BSDnetstat
. Ini digunakan-p
untuk menentukan port TCP / IP, dan tidak memiliki opsi untuk menampilkan PID.Di FreeBSD, Anda dapat menggunakan
sockstat
informasi ini. Saya tidak yakin apakah OS X punyasockstat
, karena saya tidak punya Mac.Misalnya, untuk melihat semua koneksi TCPv4:
sockstat -4
sumber
sockstat
perintah di Mac saya. :(Anda dapat menggabungkan netstat dengan grep, awk dan sed untuk menampilkan port dengan pids yang sesuai di Linux & Cygwin:
Keterangan lebih lanjut
sumber