web-dev-qa-db-ja.com

特定のPIDによってリッスンされているポートを知る方法は?

OS Xのいくつかのポートをリッスンしている特定のプロセスのPIDがあり、このプロセスがリッスンしているポートを知る必要があります。どうすればできますか?

lsofを使用して、どのプロセスがポートをリッスンしているかを知ることができますが、逆の操作を実行する必要があります。

ありがとうございました。

[〜#〜]更新[〜#〜]

OS XはBSDユーティリティを使用するため、Linux netstatではなくBSD netstatを使用しています。 Linux netstatには-pオプションがあり、PIDを表示しますBSD netstat-pを使用してポートを指定し、PIDを表示するオプションはありません。

13
shau-kote

man lsofをよく読んで、自分で解決策を見つけました。 (はい、RT * Mはまだ役に立ちます。)狙ってくれて@Gillesに感謝します。

これが解決策です:lsof -aPi -p 555(555はPIDです)。

説明:

  1. -pはPID番号を指定します。
  2. -iネットワークデバイスのみを表示します。
  3. -a to AND上記の2つの条件(それ以外の場合はOR演算されます);
  4. -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でも動作するはずです。

14
shau-kote

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/.*://’

詳細

0
Atelier Iris

どのポートが待機しているかを知りたい場合は、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

0
GROND