特定のポートでリッスンしているプロセスpidを判別します


101

タイトルが言うように、私は複数のゲームサーバーを実行しており、それらはすべて同じですnamePIDport数と数が異なります。PID特定のポートでリッスンしているサーバーのと一致させてから、このプロセスを強制終了したいと思います。私のbashスクリプトを完了するには、それが必要です。

それは可能ですか?それはウェブ上でまだ解決策を見つけられなかったからです。

回答:


125

-pフラグはnetstat、プロセスのPIDを示します。

netstat -l -p

編集: FreeBSDでソケットユーザーのPIDを取得するために必要なコマンドはsockstatです。@Cycloneとのディスカッションで解決したように、この仕事をするのは次の行です。

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1

2
netstat: 80: unknown or uninstrumented protocol80(nginx)ポートを使用して目的をテストしました。動作しませんでした。
サイクロン

5
netstat -nlp | grep :80代わりに試してください
スタンワイズ2012年

12
netstat: option requires an argument -- p
サイクロン、

2
@jasonbrittain Cygwinでは、Windowsネイティブnetstatが呼び出されます。他の構文があります。
stanwise 2012

2
この答えは間違っています:netstat:オプションには引数が必要
です

143

killコマンドに渡すことができる短いバージョン:

lsof -i:80 -t

13
これには、そのポートに接続されているプロセスも含まれます。 lsof -i4TCP:80 -sTCP:LISTEN -t代わりに、おそらくあなたが望むものです。
Nevir

まさに私が探していたもの。プロセスが実行されているポートを検索して、プロセスを強制終了したかったのです。
mythicalcoder

@Nevir「そのポートに接続されているプロセスも含まれる」とはどういう意味ですか?説明していただけますか?
kishorer747 2017

2
kill -9 `lsof -i:80 -t`コピーを容易にするため
bmjrowe

17

netstat -p -l | grep $PORTlsof -i :$PORT ソリューションは良いですが、私はパイプと同様fuser $PORT/tcpにPOSIX(で動作するcoreutils)よりも拡張構文を好みます:

pid=`fuser $PORT/tcp`

ドロップできるように純粋なpidを出力します sedマジック。

fuser私の好きなツールの1つに、そのプロセスにシグナルを直接送信する機能があります(この構文はPOSIXの拡張でもあります)。

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM

また、-kはFreeBSDでサポートされています。http://www.freebsd.org/cgi/man.cgi?query = fuser


1
フューザー
USがより

10

netstat -nlp どのポートでリッスンしているかのPIDを教えてください。


1
netstat: 80: unknown or uninstrumented protocol80(nginx)ポートを使用して目的をテストしました。動作しませんでした。
サイクロン

3

sockstatは私のマシンにネイティブにインストールされていなかったので、代わりにnetstatを使用するようにstanwiseの答えをハッキングしました。

netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g""

3

プログラムで(Bashのみを使用して)、特定のポートでリッスンしているプロセスを強制終了したかった。

ポートが8089であるとしましょう。次に、これを実行した方法を示します。

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid

これが他の誰かの役に立つことを願っています!それは私のチームを助けることになることを知っています。


1
これが、私がそれを行うために使用する関数function kill-listener { lsof -i:$1 -t | xargs kill -9 }です。ポート8089の例を使用します。– kill-listener 8089
ハリケーンハミルトン

3

構文:

kill -9 $(lsof -t -i:portnumber)

例: ポート4200で実行中のプロセスを強制終了するには、次のコマンドを実行します

kill -9 $(lsof -t -i:4200)

Ubuntuでテスト済み。


2

Windowsでは、pidを取得するnetstatオプションは-oで、-pはプロトコルフィルターを選択します。例:netstat -a -p tcp -o

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.