PIDの代わりに指定されたTCPポート番号を使用してキルするOnelinerコマンド?


8

私はしばしばします

sudo netstat -lpn |grep :8088

出力を表示する

tcp6       0      0 :::8088                 :::*                    LISTEN      11189/java

その後

sudo kill -kill 11189

killatport 8088変数としてtcpポート番号を使用し、パイプラインのエイリアスとして作成できる、より便利なコマンドが欲しいのですが、出力とパイプからPIDを取得するにはどうすればよいですか?キルコマンドに?私はawkを使用してnetstatからの出力からPIDを取得できると思いますが、入力80が8080と一致しないように、ポートを完全に一致させるにはどうすればよいですか?代わりにCプログラムにする必要がありますか?または、すでにこのような小さなユーティリティがありますか?


1
SIGKILLを使用することは通常悪い考えです。プロセスが自動的にクリーンアップしたくない理由は何ですか?
geirha 14

mvn jetty:stopインスタンスがある場合、サーバーを停止すると失敗する可能性がありますOutOfMemoryError。Javaサーブレットを再起動すると、などの通常の停止時でもポートが使用できない場合がありますmvn jetty:stop。時々、プロセスはのOutOfMemoryErrorような通常のシャットダウンでTCPポートを取得でき、解放しませんmvn jetty:stop
Niklas 14

1
それでも、mvn jetty:stopSIGTERMを送信することと同じではありません。また、アプリケーションがメモリ不足であっても、jvmはSIGTERMを処理できるはずです。
geirha 14

回答:



2

コマンドは次のように定式化できます。

netstat -lpn | grep ":1234\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}

説明:

  1. netstat -ltpn

    • これは、ポート番号を名前()に解決せずに、lTCP(t)およびそのプログラム(p)のリスニングポート()をリストしますn
  2. grep ":1234\b"

    • これは、単語(またはこの例では数値)の終わりを示す:1234境界(\b)が後に続くものを検索します。これは:12345、例えば私たちがキャッチしないことを確認します。
  3. awk '{sub(/\/.*/, "", $NF); print $NF}'

    • この

      • 代用 sub(/regex/,"replacewith", #fieldnumber)
      • この正規表現 \/.*
      • 何もない ""
      • フィールド内の$NF最後のフィールドを意味し、(含まれているフィールド、すなわちPID/program
      • それを印刷しprint $NFます。

      正規表現\/.*はリテラル/とその後のすべてに一致し、それを何もないものに置き換え、基本的には削除するので、そのフィールドにはPID番号のみが残ります。

  4. xargs -i kill -kill {}

    • xargs -i前のコマンドの出力を別のコマンドへの入力として機能させるプログラムです。kill -kill {}ここでのコマンドは、{}PID番号である「パイプラインの前のコマンドからの出力」を示します。

注:このコマンド全体は、不要なものを誤って強制終了する可能性があるため、少し危険な場合があります。それはもう少しサニタイズで使用できます。使用するときに正しいポート番号を取得していることを確認してください。

これを関数にしたい場合は、次のものをに追加できます~/.bashrc

killatport(){
    netstat -lpn | grep ":$1\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
}

を使用して、変更を保存して適用しますsource ~/.bashrc。これで、次のような関数を使用できます。

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