Linux で killall コマンドを使用してプロセスを終了する 8 つの例

Linux で killall コマンドを使用してプロセスを終了する 8 つの例

Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば、kill コマンドに PID を渡すことでプロセスを強制終了できます。pkill コマンドは正規表現を入力として受け取るため、パターンに一致するプロセスが強制終了されます。

しかし、killall というコマンドもあり、これはデフォルトで引数名と正確に一致し、一致するプロセスを強制終了します。この記事では、このコマンドのいくつかの実用的な応用について説明します。

デフォルトでは、killall コマンドはプロセス/グループに SIGTERM シグナルを送信しますが、引数を介して特定のシグナルを送信することもできます。

以下では、killall の 8 つの使用法を例とともに詳しく紹介します。

1. 基本的な使い方

hello1、hello2、hello3 という 3 つのプロセスが実行されていて、hello1 プロセスを強制終了したい場合は、次の方法を直接使用できます。

killall hello1

操作の結果は次のとおりです。

[alvin@VM_0_16_centos テスト]$ ps aux | grep hello 
アルビン 12061 0.0 0.0 4152 344 ポイント/0 S 14:41 0:00 ./hello1 
アルビン 12074 0.0 0.0 4152 344 ポイント/0 S 14:41 0:00 ./hello2 
アルビン 12084 0.0 0.0 4152 340 ポイント/0 S 14:41 0:00 ./hello3 
alvin 12089 0.0 0.0 112648 964 ポイント/0 R+ 14:41 0:00 grep --color=auto hello 
[alvin@VM_0_16_centos テスト]$ killall hello1 
[1] 終了しました ./hello1 
[alvin@VM_0_16_centos テスト]$ ps aux | grep hello 
アルビン 12074 0.0 0.0 4152 344 ポイント/0 S 14:41 0:00 ./hello2 
アルビン 12084 0.0 0.0 4152 340 ポイント/0 S 14:41 0:00 ./hello3 
alvin 12170 0.0 0.0 112648 964 ポイント/0 R+ 14:42 0:00 grep --color=auto hello

ご覧のとおり、hello1 プロセスは終了しています。

残りの hello2 プロセスと hello3 プロセスを一度に強制終了、つまりプロセスをバッチで強制終了したいのですが、これは次のように実行できます。

[alvin@VM_0_16_centos テスト]$ killall hello* 
こんにちは: プロセスが見つかりません 
hello1: プロセスが見つかりません 
hello.c: プロセスが見つかりません 
[2]- ./hello2を終了しました 
[3]+ 終了しました ./hello3

このようにして、hello で始まるすべてのプロセスが強制終了されます。

2. ユーザーが実行したプロセスを終了する

正規表現に一致するプロセス グループを強制終了できます。同様に、特定のユーザーによって実行されたすべてのプロセスを強制終了することもできます。

たとえば、ユーザー harry は現在次のプロセスを実行しています。

[alvin@VM_0_16_centos テスト]$ ps aux | grep harry 
root 13675 ​​0.0 0.2 148236 5584 ? Ss 14:55 0:00 sshd: harry [priv] 
ハリー 13677 0.0 0.1 148236 2944 ? S 14:55 0:00 sshd: harry@pts/1 
root 13678 0.0 0.2 148236 5444 ? Ss 14:55 0:00 sshd: harry [priv] 
ハリー 13680 0.0 0.1 148236 2252 ? S 14:55 0:00 sshd: harry@notty 
ハリー 13681 0.0 0.1 53228 2168 ? Ss 14:55 0:00 /usr/libexec/openssh/sftp-server 
ハリー 13694 0.0 0.1 116436 3252 ポイント/1 Ss+ 14:55 0:00 -bash 
ハリー 13948 0.0 0.0 4152 344 ポイント/1 S 14:57 0:00 ./hello1 
ハリー 13952 0.0 0.0 4152 344 ポイント/1 S 14:57 0:00 ./hello2 
ハリー 13959 0.0 0.0 4152 344 ポイント/1 S 14:57 0:00 ./hello3 
alvin 14005 0.0 0.0 112648 964 ポイント/0 R+ 14:58 0:00 grep --color=auto harry

ここで、harry によって実行されるすべてのプロセスを強制終了したいのですが、これは次のように実行できます。

killall -u harry

結果は次のとおりです。

[alvin@VM_0_16_centos テスト]$ sudo killall -u harry 
[alvin@VM_0_16_centos テスト]$ ps aux | grep harry 
アルビン 14040 0.0 0.0 112648 964 ポイント/0 R+ 14:58 0:00 grep --color=auto ハリー

ただし、このオプションは、ターミナル プロセスを含むユーザーのすべてのプロセスを強制終了し、ユーザーが直接終了することになるため、注意して使用する必要があります。したがって、負けたくないのであれば、このオプションを軽々しく試さないでください。

3. 時間が来たらプロセスを終了する

現在多くのプログラムを実行しており、5 時間以上実行されているプロセスのみを終了したい場合は、次のように -o オプションを使用できます。ここで、o は古いものを表します。

killall -o 5h

同様に、実行時間が 4 時間未満のプロセスを強制終了する場合は、次のように -y オプションを使用します。ここで、y は「若い」を表します。

killall -y 4h

これら 2 つのオプションも非常に大まかで、ターミナルを終了するため、ここでは説明しません。

4. 大文字と小文字を区別しない

デフォルトでは、killall コマンドは大文字と小文字を区別するため、大文字と小文字を間違えて記述すると、プロセスが正しく強制終了されません。

[alvin@VM_0_16_centos テスト]$ killall HELLO1 
TEST1: プロセスが見つかりません

大文字と小文字を区別しない場合は、-I (大文字の i) オプションを追加します。

[alvin@VM_0_16_centos テスト]$ killall -I HELLO1 
[1] 終了しました ./hello1

5. コマンド実行エコーをオフにする

デフォルトでは、killall はコマンドの実行ステータスを通知しますが、実行結果を気にせず、単にサイレントに実行したい場合はどうすればよいでしょうか。次のように、-q オプションを追加するだけです。q は quite を表します。

[alvin@VM_0_16_centos テスト]$ killall HELLO2 
HELLO2: プロセスが見つかりません 
[alvin@VM_0_16_centos テスト]$ killall -q HELLO2 
[alvin@VM_0_16_centos テスト]$

6. サポートされているすべての信号を一覧表示する

前述のように、デフォルトでは、killall コマンドは SIGTERM シグナルを送信しますが、他のシグナルを送信できますか?もちろんできますよ。 -l オプションを使用すると、killall でサポートされているすべてのシグナルを表示できます。

[alvin@VM_0_16_centos テスト]$ killall -l 
HUP INT QUIT ILL TRAP ABRT IOT バス FPE KILL USR1 SEGV USR2 パイプ ALRM TERM 
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS 
未使用

-s オプションに続いてシグナル名を使用すると、プロセスに特別なシグナルを送信できます。

7. インタラクティブ操作

複数のプロセスを強制終了するかどうか確信が持てず、強制終了すべきでないプロセスを強制終了してしまうのではないかと心配な場合は、-i オプションを使用できます。このオプションを使用すると、強制終了するプロセスと保持するプロセスを自由に決定できます。

[alvin@VM_0_16_centos テスト]$ killall -i hello* 
hello2(13825) を終了しますか? (y/N) y 
hello3(13831) を強制終了しますか? (y/N) N 
こんにちは: プロセスが見つかりません 
hello1: プロセスが見つかりません 
hello3: プロセスが見つかりません 
hello.c: プロセスが見つかりません 
[2]- ./hello2を終了しました

8. プロセスが終了するまで待つ

プロセスにシグナルが送信されたときに、実行結果を返す前にプロセスが強制終了されていることを確認したい場合は、次のように -w オプションを使用できます。ここで、w は wait を表します。

[alvin@VM_0_16_centos テスト]$ killall -w hello1 
[4]+ 終了しました ./hello1

ここでは効果がないように見えますが、実際に実行すると、1〜2秒後に実行結果が表示されることがわかります。-wオプションがなければ、実行結果はすぐに表示されます。

要約する

上記は、Linux で killall コマンドを使用してプロセスを終了する 8 つの使用例の詳細な説明です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • PythonはLinuxプロセスを判別し、プロセスを強制終了します
  • Linuxでプロセスを強制終了する方法の詳細な説明
  • Linux で占有ポートを見つけてプロセスを強制終了する方法
  • Linux でコマンドまたはプロセスの実行時間を調べる方法
  • プロセスのすべての情報を表示するLinuxメソッドの例
  • Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

<<:  MySQLのslave_exec_modeパラメータの詳細な説明

>>:  JavaScript をスリープまたは待機させる方法

推薦する

シンプルなウェブデザインコンセプトのカラーマッチング

(I)ウェブページのカラーマッチングの基本概念(1)白黒の言葉は永遠のテーマです。誰もそれを悪く言う...

MySQL で自動インクリメントシーケンスを実装するためのサンプルコード

1. シーケンステーブルを作成する テーブル `sequence` を作成します ( `name` ...

mysql5.7 以降で my.ini を設定するための詳細な手順

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリ、my-...

新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法

ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...

MySql データベース クエリの特殊コマンド

まずMySQLのインストールMySQLソフトウェアをダウンロードし、インストールパスを変更しますMy...

JS は Web ページナビゲーションバーの特殊効果を実現します

この記事では、ネイティブ JS を使用して実装された実用的な Web ナビゲーション バー効果を紹介...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

MySQLでテーブルを接続するいくつかの方法

MySQL テーブルでの接続方法は実は非常に簡単なので、ここではその特徴を簡単にリストします。テーブ...

JavaScript のプライベート クラス フィールドと TypeScript のプライベート修飾子の詳細な説明

目次JavaScript のプライベート クラス フィールドとプライバシーの必要性JavaScrip...

VMware vCenter の不正な任意ファイルアップロードの脆弱性 (CVE-2021-21972) について

背景CVE-2021-21972 VMware vCenter における認証されていないコマンド実行...

TypeScriptジェネリックの使用

目次1. 使いやすい2. 関数内でジェネリックを使用する3. クラス内でジェネリックを使用する4. ...

MySQLスタートアップが起こした事故の実録

目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...

CSS 8 目を引く HOVER 効果のサンプル コード

1. エフェクトHTMLを送信する <div id="送信ボタン">...

HTMLにリンクを挿入する方法

各 Web ページには、URL () で識別されるアドレスがあります。通常、Web サイト内でリンク...

インラインブロックを使用した複数のdiv間の間隔はプログラミング方法とは異なります

inline-block について学習しているときに、境界線と inline-block を持つ複数...