ポート番号で Linux プロセスを強制終了する方法
Linux プロセスを強制終了するには、その ID または名前が必要です。使用しているポートしかわかっていない場合、それを強制終了できますか? はい、いくつかの異なる方法で。
プロセスを殺す
Linux プロセスが応答しなくなることがあります。正常に動作しなくなるか、動作し続けてもオフにする要求を無視するか、メモリ、CPU、またはネットワーク帯域幅を消費し始める可能性があります。
動機が何であれ、Linux コマンド ラインからプロセスを強制終了する方法があります。古典的な方法は、強制終了するプロセスの ID を指定して kill コマンドを使用することです。チームにはいくつかのkill
近親者がいます。このコマンドpkill
は、プロセスを名前でkillall
強制終了し、名前の一部を共有しているプロセスをすべて強制終了します。
プロセスについて知っていることは、コンピューターのポートを使用していることだけである場合でも、プロセスを特定して強制終了する方法があります。ネットワーク用語では、「ポート」は、CAT5 または 6 ネットワーク ケーブルなど、端にプラグが付いたケーブルを差し込む物理的な接続を意味する場合もあれば、ソフトウェア ポートを意味する場合もあります。
ソフトウェア ポートは、ネットワーク接続の最後の部分です。デバイスの IP アドレスは、コンピューターまたはその他のネットワーク デバイスを識別します。コンピュータ内のアプリケーションは、異なるポートを使用します。それらは異なるレベルの詳細を提供します。ネットワーク トラフィックは、IP アドレスを使用して正しいコンピュータに到着し、ポート アドレッシングを使用して、正しいアプリケーションに配信できます。
これは、郵便物がホテルに到着し、仕分けされて適切な部屋に届けられるのと似ています。IP アドレスはホテルの住所のようなもので、部屋番号はポート番号のようなものです。
ポートでネットワーク アクティビティが表示され、それを作成しているプロセスが認識されない場合、またはその動作が問題や疑いを引き起こしている場合は、そのプロセスを強制終了することをお勧めします。ポート番号しか知らない場合でも、プロセスを追跡して強制終了できます。
socat と接続する
複数の接続を強制終了するために、socat
さまざまなプロトコルを使用してネットワーク接続を作成します。をインストールする必要がありますsocat
。Ubuntu にインストールするには、次のコマンドを使用します。
sudo apt install socat
Fedora での使用dnf
:
sudo dnf install socat
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 &
異なるプロトコルを使用する少数のソケットを選択できるように、さらに 2 つの接続を作成します。UDP接続とSCTP接続を作成します。変更されるコマンドの唯一の部分はプロトコルです。
socat udp-listen:7889,bind=127.0.0.1 stdout &
socat sctp-listen:9999,bind=127.0.0.1 stdout &
暗殺の使用
もちろんkill
、プロセス ID がわかっている場合は、プロセスを終了するために使用できます。PID を見つけるには lsof
、コマンドを使用できます。
TCP プロトコルを使用するポート 7889 のプロセスの詳細を一覧表示するには、-i
ここに示すように (インターネット アドレス) オプションを使用します。
lsof -i tcp:7889
このプロセスの PID は 3141 で、以下で使用できますkill
。
sudo kill 3141
パイプを使えば、いくらか手間を省くことができます。対象のポート (7889) を含む行を検索するように出力lsof
をawk
指示awk
し、この行から 2 番目のフィールドを出力すると、PID が分離されます。
lsof -i tcp:7889 | awk '/7889/{print $2}'
awk
その後、 を使用して出力をkill
コマンドにパイプできxargs
ます。コマンドxargs
は、パイプラインを介して入力を受け取り、それをコマンド ライン パラメーターとして別のコマンドに渡します。チームxargs
で使用いたします。kill
lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill
視覚的なフィードバックはありません。典型的な Linux のやり方では、良いニュースはありません。プロセスが完了したことを確認したい場合は、lsof
再度使用できます。
lsof -i tcp:7889
何も報告されていないのでlsof
、そのような関係がないことがわかります。
前のコマンドで「tcp」を「udp」に置き換えるだけで、UDP プロトコルを使用するプロセスを削除できます。
lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill
ただし、lsof
SCTP プロトコルは認識しません。
lsof -i sctp:7889
ss
コマンドを使用してこれを行うことができます。-S
(SCTP) オプションを使用して SCTP ソケットを検索し、 -a
(all) オプションを使用してすべてのタイプのソケット (リッスン、受信、接続など) を検索し、-p
(processes) オプションを使用してプロセスに関する情報を一覧表示します。ソケット。
ss -Sap
grep
と を使用して、この出力を解析できますawk
。いくつかの PERL 正規表現で解析することもできますgrep
が、この方法の方がはるかに理解しやすいです。これを複数回使用する場合は、おそらくエイリアスまたはシェル関数にするでしょう。
ss
からに 出力を送信し、grep
ポート番号 7889 を見つけます。 からgrep
に出力を送信しますawk
。では、 (separator string) オプションawk
を使用して、フィールド セパレータとして-F
カンマ ” ” を設定します。,
「pid=」を含む行を探し、その行の 2 番目のコンマ区切りフィールドを出力します。
ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'
これにより、文字列「pid=2859」が得られました。
これをawk
再度渡し、フィールド セパレータを等号 ” =
” に設定し、その行の 2 番目のフィールドを出力します。これは等号の後ろのテキストになります。
ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'
これで、プロセス ID が分離されました。xargs
PID をkill
コマンド ライン パラメータとして渡すために使用でき ます。
ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill
これにより、ポート 7889 で SCTP プロトコル ソケットを使用していたプロセスが強制終了されます。
定着チーム
このコマンドfuser
により、作業が大幅に簡素化されます。欠点は、TCP および UDP ソケットでしか機能しないことです。プラス面として、これらは、対処する必要がある最も一般的な 2 つのソケット タイプです。このコマンドfuser
は、テストした Ubuntu、Fedora、および Manjaro マシンに既にインストールされています。
(kill) オプションを使用して-k
、ポートとプロトコルを指定するだけです。(namespace) オプションを使用-n
してプロトコルとポートを指定するか、「スラッシュ ラベル形式」を使用して最初にポート番号を指定することができます。
fuser -n tcp 7889
fuser 7889/udp
完了したプロセスのポート番号、プロトコル、および PID がターミナル ウィンドウに出力されます。
最初に定着器を試す
作業しているコンピューターにインストールされる可能性が高く、プロトコルは TCP または UDP である可能性が高いため、最も簡単な方法が機能する可能性が高くなります。
コメントを残す