ポート番号で Linux プロセスを強制終了する方法

ポート番号で Linux プロセスを強制終了する方法

Linux プロセスを強制終了するには、その ID または名前が必要です。使用しているポートしかわかっていない場合、それを強制終了できますか? はい、いくつかの異なる方法で。

プロセスを殺す

Linux プロセスが応答しなくなることがあります。正常に動作しなくなるか、動作し続けてもオフにする要求を無視するか、メモリ、CPU、またはネットワーク帯域幅を消費し始める可能性があります。

動機が何であれ、Linux コマンド ラインからプロセスを強制終了する方法があります。古典的な方法は、強制終了するプロセスの ID を指定して kill コマンドを使用することです。チームにはいくつかのkill近親者がいます。このコマンドpkillは、プロセスを名前でkillall強制終了し、名前の一部を共有しているプロセスをすべて強制終了します。

プロセスについて知っていることは、コンピューターのポートを使用していることだけである場合でも、プロセスを特定して強制終了する方法があります。ネットワーク用語では、「ポート」は、CAT5 または 6 ネットワーク ケーブルなど、端にプラグが付いたケーブルを差し込む物理的な接続を意味する場合もあれば、ソフトウェア ポートを意味する場合もあります。

ソフトウェア ポートは、ネットワーク接続の最後の部分です。デバイスの IP アドレスは、コンピューターまたはその他のネットワーク デバイスを識別します。コンピュータ内のアプリケーションは、異なるポートを使用します。それらは異なるレベルの詳細を提供します。ネットワーク トラフィックは、IP アドレスを使用して正しいコンピュータに到着し、ポート アドレッシングを使用して、正しいアプリケーションに配信できます。

これは、郵便物がホテルに到着し、仕分けされて適切な部屋に届けられるのと似ています。IP アドレスはホテルの住所のようなもので、部屋番号はポート番号のようなものです。

ポートでネットワーク アクティビティが表示され、それを作成しているプロセスが認識されない場合、またはその動作が問題や疑いを引き起こしている場合は、そのプロセスを強制終了することをお勧めします。ポート番号しか知らない場合でも、プロセスを追跡して強制終了できます。

socat と接続する

複数の接続を強制終了するために、socatさまざまなプロトコルを使用してネットワーク接続を作成します。をインストールする必要がありますsocat。Ubuntu にインストールするには、次のコマンドを使用します。

sudo apt install socat

Ubuntu にソケットをインストールする

Fedora での使用dnf:

sudo dnf install socat

Fedora にソケットをインストールする

Manjaro では、次のように入力する必要があります。

sudo pacman -S socat

マンジャロにジュースをインストールする

少し冗長ですが、構文socatは単純です。送信元アドレスと宛先アドレスを指定する必要があります。それぞれについて、プロトコル、IP アドレス、およびポート番号を指定する必要があります。ソースまたは宛先として STDIN または STDOUT を置き換えることができます。

このコマンドは、ポート 7889 の TCP リスニング ソケット、ループバック IP アドレス 127.0.0.1、および STDOUT 間の接続を作成します。アンパサンド ” &” はコマンドをバックグラウンドで実行するため、コマンド ラインへのアクセスは維持されます。

socat tcp-listen:7889,bind=127.0.0.1 stdout &

socat を使用したリッスン TCP ソケット接続の作成

異なるプロトコルを使用する少数のソケットを選択できるように、さらに 2 つの接続を作成します。UDP接続とSCTP接続を作成します。変更されるコマンドの唯一の部分はプロトコルです。

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

socat を使用した UDP および SCTP ソケット リスニング接続の作成

暗殺の使用

もちろんkill、プロセス ID がわかっている場合は、プロセスを終了するために使用できます。PID を見つけるには lsof、コマンドを使用できます。

TCP プロトコルを使用するポート 7889 のプロセスの詳細を一覧表示するには、-iここに示すように (インターネット アドレス) オプションを使用します。

lsof -i tcp:7889

lsof を使用して、特定のポートとプロトコルを使用するプロセスの詳細を表示します。

このプロセスの PID は 3141 で、以下で使用できますkill

sudo kill 3141

パイプを使えば、いくらか手間を省くことができます。対象のポート (7889) を含む行を検索するように出力lsofawk指示awkし、この行から 2 番目のフィールドを出力すると、PID が分離されます。

lsof -i tcp:7889 | awk '/7889/{print $2}'

lsof 出力を awk にパイプする

awkその後、 を使用して出力をkillコマンドにパイプできxargsます。コマンドxargsは、パイプラインを介して入力を受け取り、それをコマンド ライン パラメーターとして別のコマンドに渡します。チームxargsで使用いたします。kill

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

パイプを使用して lsof 出力を awk にパイプし、awk から xargs にパイプして kill する

視覚的なフィードバックはありません。典型的な Linux のやり方では、良いニュースはありません。プロセスが完了したことを確認したい場合は、lsof再度使用できます。

lsof -i tcp:7889

lsof を使用して、特定のポートとプロトコルを使用してプロセスの詳細を検索するが成功しない

何も報告されていないのでlsof、そのような関係がないことがわかります。

前のコマンドで「tcp」を「udp」に置き換えるだけで、UDP プロトコルを使用するプロセスを削除できます。

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

パイプを使用して lsof 出力を awk に、awk から xargs にパイプし、UDP ソケットを kill する

ただし、lsofSCTP プロトコルは認識しません。

lsof -i sctp:7889

lsof は SCTP プロトコルでは機能しません

ssコマンドを使用してこれを行うことができます。-S(SCTP) オプションを使用して SCTP ソケットを検索し、 -a(all) オプションを使用してすべてのタイプのソケット (リッスン、受信、接続など) を検索し、-p(processes) オプションを使用してプロセスに関する情報を一覧表示します。ソケット。

ss -Sap

ss で SCTP ソケットを使用してプロセスの詳細を出力する

grepと を使用して、この出力を解析できますawk。いくつかの PERL 正規表現で解析することもできますgrepが、この方法の方がはるかに理解しやすいです。これを複数回使用する場合は、おそらくエイリアスまたはシェル関数にするでしょう。

ssからに 出力を送信し、grepポート番号 7889 を見つけます。 からgrepに出力を送信しますawk。では、 (separator string) オプションawkを使用して、フィールド セパレータとして-Fカンマ ” ” を設定します。,「pid=」を含む行を探し、その行の 2 番目のコンマ区切りフィールドを出力します。

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'

パイプを使用して ss、grep、awk を接続し、PID 文字列を抽出する

これにより、文字列「pid=2859」が得られました。

これをawk再度渡し、フィールド セパレータを等号 ” =” に設定し、その行の 2 番目のフィールドを出力します。これは等号の後ろのテキストになります。

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

パイプを使用して ss、grep、awk を 2 回接続して PID を抽出する

これで、プロセス ID が分離されました。xargsPID をkillコマンド ライン パラメータとして渡すために使用でき ます。

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

ss、grep、awk、xargs でパイプを使用して SCTP ソケット プロセスを終了する

これにより、ポート 7889 で SCTP プロトコル ソケットを使用していたプロセスが強制終了されます。

定着チーム

このコマンドfuserにより、作業が大幅に簡素化されます。欠点は、TCP および UDP ソケットでしか機能しないことです。プラス面として、これらは、対処する必要がある最も一般的な 2 つのソケット タイプです。このコマンドfuserは、テストした Ubuntu、Fedora、および Manjaro マシンに既にインストールされています。

(kill) オプションを使用して-k、ポートとプロトコルを指定するだけです。(namespace) オプションを使用-nしてプロトコルとポートを指定するか、「スラッシュ ラベル形式」を使用して最初にポート番号を指定することができます。

fuser -n tcp 7889 fuser 7889/udp

fuser コマンドを使用して、TCP および UDP ソケットを使用してプロセスを強制終了する

完了したプロセスのポート番号、プロトコル、および PID がターミナル ウィンドウに出力されます。

最初に定着器を試す

作業しているコンピューターにインストールされる可能性が高く、プロトコルは TCP または UDP である可能性が高いため、最も簡単な方法が機能する可能性が高くなります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です