Networking

如何知道某個 PID 監聽了哪些埠?

  • December 27, 2019

我有一個特定程序的 PID,它在我的 OS X 上偵聽某些埠,我需要知道該程序偵聽了哪些埠。我該怎麼做?

我知道我可以lsof用來知道哪個程序正在偵聽某個埠,但我需要執行逆操作。

謝謝你。

UPD

OS X 使用 BSD 實用程序,所以我有 BSDnetstat而不是 Linux netstat。Linuxnetstat-p顯示 PID 的選項,BSDnetstat用於-p指定埠並且沒有顯示 PID 的選項。

我通過深入閱讀自己找到了解決方案man lsof。(是的,RT*M 仍然有幫助。)感謝@Gilles 瞄準。

這是解決方案: lsof -aPi -p 555(555 是 PID)。

解釋:

  1. -p指定PID號;
  2. -i僅顯示網路設備;
  3. -a對上述兩個條件進行 AND 運算(否則它們將被 ORed);
  4. -P顯示埠號(而不是預設的埠名稱)。

此外,可以相應地使用lsof -aPi4 -p 555lsof -aPi6 -p 55僅用於 IPv4 或 IP6 地址。

如果輸出將由另一個程序-Fn選項解析可能會有所幫助。使用此選項lsof將產生“其他程序的輸出”而不是格式良好的輸出。lsof -aPi4 -Fn -p 555將輸出如下內容:

p554
nlocalhost:4321

PS 所有這些我都在我的 OS X El Capitan 上進行了測試,但我可以看到它也應該在 Linux 上執行。

引用自:https://unix.stackexchange.com/questions/278400