1728

netstat -pntl | grep $PORTLinux では、 orを使用fuser -n tcp $PORTして、指定された TCP ポートでリッスンしているプロセス (PID) を見つけることができます。Mac OS X で同じ情報を取得するにはどうすればよいですか?

4

18 に答える 18

2652

macOSBig Sur以降では、次のコマンドを使用します。

sudo lsof -i -P | grep LISTEN | grep :$PORT

または、IPv4 だけを表示するには:

sudo lsof -nP -i4TCP:$PORT | grep LISTEN

古いバージョンでは、次のいずれかの形式を使用します。

sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN

ポート番号またはコンマ区切り$PORTのポート番号のリストで置き換えます。

sudo#1024 より下のポートに関する情報が必要な場合は、先頭に (スペースが続きます)追加します。

-nフラグは、ホスト名の代わりに IP アドレスを表示するためのものです。これにより、ホスト名を取得するための DNS ルックアップが遅くなる可能性があるため (多くのホストでは数秒または 1 分)、コマンドの実行が大幅に高速化されます。

このフラグは、 のような解決済みの名前や、のような難解なサービス名-Pの代わりに生のポート番号を表示するためのものです。httpftpdpservesocalia

その他のオプションについては、コメントを参照してください。

完全を期すために、頻繁に一緒に使用されるため:

PID を強制終了するには:

sudo kill -9 <PID>
# kill -9 60401
于 2010-12-12T12:39:44.943 に答える
792

macOS 12 Montereyまで、 macOSのすべてのバージョンがこれをサポートしています。

sudo lsof -iTCP -sTCP:LISTEN -n -P

個人的には、次の単純な関数で終わりました~/.bash_profile

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

次に、listeningコマンドは、あるポートでリッスンしているプロセスのリストを表示し、listening smthこれをあるパターンに対して grep します。

これがあれば、特定のプロセス (例: listening dropbox) またはポート (例: ) について尋ねるのは非常に簡単listening 22です。

lsofコマンドには、ポート、プロトコル、プロセスなどについて質問するための特殊なオプションがいくつかありますが、個人的には、これらの低レベルのオプションをすべて覚える必要がないため、上記の関数の方がはるかに便利であることがわかりました。lsofは非常に強力なツールですが、残念ながら使い心地は良くありません。

于 2015-05-04T12:11:17.800 に答える
80

これは Mavericks (OSX 10.9.2) で機能します。

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
于 2014-05-12T03:33:35.017 に答える
66

LISTEN、ESTABLISHED、および CLOSED ポートの場合

sudo lsof -n -i -P | grep TCP

LISTEN ポートのみ

sudo lsof -n -i -P | grep LISTEN

特定の LISTEN ポートの場合、例: ポート 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

または、簡潔な要約 [サービス/アプリの説明なし] が必要な場合は、NETSTAT を参照してください。ここでの良い面は、sudoが必要ないことです

netstat -a -n | grep 'LISTEN '

使用アイテムの説明:

-nホスト名を抑制

-i IPv4 および IPv6 プロトコルの場合

-ポート名を省略

-a [netstat 経由] すべてのソケット

-n [netstat 経由] 名前を解決せず、ネットワーク アドレスを数字で表示します

High Sierra 10.13.3 およびMojave 10.14.3でテスト済み

  • 最後の構文netstatは Linux でも機能します
于 2018-12-08T07:22:01.487 に答える
21

最新の macOS バージョンでは、次のコマンドを使用できます。

lsof -nP -i4TCP:$PORT | grep LISTEN

覚えにくい場合は、bash関数を作成して、次のようなわかりやすい名前でエクスポートする必要があります。

vi ~/.bash_profile

次に、そのファイルに次の行を追加して保存します。

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

これで、ターミナルに入力listening_on 80して、ポートでリッスンしているプロセスを確認できます80

于 2018-06-05T12:32:23.043 に答える
14

Snow Leopard (OS X 10.6.8) で「man lsof」を実行すると、次の結果が得られます。

lsof -i 4 -a

(実際の手動入力は「lsof -i 4 -a -p 1234」です)

以前の回答は Snow Leopard では機能しませんでしたが、pts による回答で「lsof」の使用が見られるまで、「netstat -nlp」を使用しようとしていました。

于 2013-08-25T19:14:09.500 に答える
7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

これにより、誰が何をしているかが表示されます。-n を削除すると、ホスト名が表示されます (少し遅くなります)。

于 2014-05-03T09:35:42.400 に答える