OS Xのいくつかのポートをリッスンしている特定のプロセスのPIDがあり、このプロセスがリッスンしているポートを知る必要があります。どうすればできますか?
lsof
を使用して、どのプロセスがポートをリッスンしているかを知ることができますが、逆の操作を実行する必要があります。
ありがとうございました。
[〜#〜]更新[〜#〜]
OS XはBSDユーティリティを使用するため、Linux netstat
ではなくBSD netstat
を使用しています。 Linux netstat
には-p
オプションがあり、PIDを表示しますBSD netstat
は-p
を使用してポートを指定し、PIDを表示するオプションはありません。
man lsof
をよく読んで、自分で解決策を見つけました。 (はい、RT * Mはまだ役に立ちます。)狙ってくれて@Gillesに感謝します。
これが解決策です:lsof -aPi -p 555
(555はPIDです)。
説明:
-p
はPID番号を指定します。-i
ネットワークデバイスのみを表示します。-a
to AND上記の2つの条件(それ以外の場合はOR演算されます);-P
は、ポート番号を表示します(デフォルトではポート名ではありません)。さらに、lsof -aPi4 -p 555
またはlsof -aPi6 -p 55
をIPv4またはIP6のみのアドレスに使用できます。
出力が別のプログラムによって解析される場合は、-Fn
オプションが役立つことがあります。このオプションを使用すると、lsof
は、Nice形式の出力の代わりに「他のプログラムの出力」を生成します。 lsof -aPi4 -Fn -p 555
は次のように出力します。
p554
nlocalhost:4321
[〜#〜] ps [〜#〜]すべてOS X El Capitanでテストしましたが、ご覧のようにLinuxでも動作するはずです。
lsof
ネットワークポートを含む、プロセスによって開かれたファイルに関する情報を提供します。ほとんどすべてのUNIXシステムで使用できます OSXを含む 。
Rosetta Stone for Unix は、OSXで「プロセスをファイルまたはポートに一致させる」ための他のツールをリストしません。
TCPポートでリッスンしているプロセスを一覧表示するには、
lsof -iTCP -sTCP:LISTEN
lsof -iUDP
は、UDPソケットが開いているプロセスをリストします。 lsof -i
は、開いているすべてのネットワークソケット(TCPクライアント、TCPサーバー、およびその他のIPプロトコル))を一覧表示します。
LinuxとCygwinで、netstatをgrep、awk、sedと連結して、対応するpidを持つポートを表示できます。
$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’
どのポートが待機しているかを知りたい場合は、netstatの-pオプションを使用できます。スーパーユーザーである必要があります。
$ Sudo netstat -nlp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
それについてもっと知りたいならこれを試してください リンク
FreeBSDでは、この情報にsockstat
を使用できます。 Macを持っていないので、OS Xにsockstat
があるかどうかわかりません。
たとえば、すべてのTCPv4接続を表示するには:
sockstat -4