blog

あなたが理解していないかもしれないkillallコマンドの5つの実用的なアプリケーション

killallコマンドは特定のプロセスにシグナルを送るために使われます。このシグナルはデフォルトではSIGTERMですが、killallコマンドはパラメータを使って他のシグナルを指定することができます...

Jan 22, 2016 · 6 min. read
シェア

Linuxのコマンドラインには、プロセスを強制終了するコマンドがたくさんあります。例えば、"kill" コマンドに PID を渡してプロセスを kill することができます。"pkill" コマンドは正規表現を入力として使用するので、そのパターンにマッチするプロセスはすべて kill されます。

しかし、"killall "という別のコマンドもあり、これはデフォルトでパラメータ名に正確にマッチし、マッチしたプロセスを強制終了します。この記事では、このコマンドの実用的な使い方について説明します。

[]

Linuxのkillallコマンド

killall コマンドを使うと、特定のプロセスにシグナルを送ることができます。このシグナルはデフォルトでは SIGTERM ですが、killall コマンドはパラメータを使って他のシグナルを指定することができます。

では、このコマンドが実際にどのように使われるのか、いくつかの実例で見てみましょう。

1.基本例

この例では、killallを使用して特定のプロセスを killします。同じ開始文字を持つ2つのプロセスがあるとします:

$ ps -aef | grep 「テスト” 
himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test 
himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again 

test_again」プロセスを終了させるにはどうすればよいですか?

$ killall test_again 
[2]+ Terminated ./test_again 

ご覧のように、killallコマンドは "test_again "プロセスを終了させました。この事実はpsコマンドで確認できます:

$ ps -aef | grep 「テスト” 
himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test 

test_again "は終了しているため、表示されていないことがわかります。

2.大文字小文字を無視するには、-Iオプションを使用します。

デフォルトでは、killallコマンドは大文字と小文字を区別します。例えば

$ ps -aef | grep 「テスト” 
himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test 
himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again 
himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test 
$ killall TEST 
TEST: no process found 

ご覧のように、killallコマンドは "TEST "という名前のプロセスを見つけられませんが、"test "プロセスは実際に実行されています。

killallコマンドに大文字小文字を無視させるには、-Iオプションを使用します。例

$ killall -I TEST 
[1]- Terminated ./test 

これで「テスト」プロセスが正常に終了したことが確認できます。

3.iオプションでインタラクティブにプロセスを終了します。

killallコマンドは複数のプロセスを終了させることができます。

$ killall test test_again 
[2]- Terminated ./test_again 
[3]+ Terminated ./test 

しかし、killallにインタラクティブにプロセスを終了させたい場合は、-iオプションを使うことができます。

以下はその例です:

$ killall -i test test_again 
Kill test(4201) ? (y/N) y 
Kill test_again(4202) ? (y/N) y 
[1]- Terminated ./test 
[2]+ Terminated ./test_again 

この方法では、複数のプロセスを同時に終了させるときに、ユーザーが特定のプロセスを終了させるかどうかを制御できることがわかります。

4.コマンド実行表示を無効にするには、-qオプションを使用します。

killallが指定したプロセスを見つけられない場合、以下のようなエラーメッセージが出力されることがあります。

$ killall TEST 
TEST: no process found 

しかし、killallを静かに実行させたい場合は、-qオプションを使うことができます:

$ killall -q TEST 
$ 

ご覧のように、-qオプションを使用すると、killallコマンドの出力メッセージが抑制されます。

5.サポートされているすべてのシグナルを一覧表示するには、-lオプションを使用します。

説明したように、killallはプロセスにシグナルを送ります。

sオプションを使うと、プロセスに特別なシグナルを送ることができます。

送信可能なすべてのシグナルを知るには、-lオプションを使って取得します:

$ killall -l 
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM 
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS 
UNUSED 

killallは上記のすべての信号をサポートしています。

これらのシグナルの名前を見て、あなたは心の中でこうつぶやくかもしれません。

$ man 7 signal 

皆さんと相談したいことがあります。

killallコマンドのmanによると、プロセス名の長さが15以下の場合、デフォルトでフルネームでマッチされるとのことです。

例えば、非常に長い名前の2つのプロセスがあるとします:

$ ps -aef | grep 「テスト” 
himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij 
himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh 

最初のプロセスの名前は15文字です。では、killallを使ってこのプロセスを終了させてみましょう:

$ killall test_abcdefghij 
[1]- Terminated ./test_abcdefghij 

ご覧のように、killallコマンドはプロセスを正常に終了させました。

例えば、両方のプロセスの名前が15文字より長い場合、manによると、killallは両方のプロセスを killします。例えば

$ ps -aef | grep 「テスト” 
himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx 
himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz 
himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test 

どちらのプロセスも15文字より長い名前であることがわかります。さて、2番目のプロセスを killall を使って kill しようとすると、次のようになります:

$ killall test_abcdefghijklmnopqrstuvwxyz 
[6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz 

指定されたプロセスのみを終了させ、他のプロセスは終了させません。

$ ps -aef | grep 「テスト” 
himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx 
himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test 

私の試みが間違っているのか、それともkillallのバグなのか、よくわかりません。

ちなみに、私のマシンでのkillallコマンドのバージョン情報は以下の通りです:

$ killall --version 
killall (PSmisc) 22.20 
 (C) 1993-2012 Werner Almesberger and Craig Small 
PSmisc comes with ABSOLUTELY NO WARRANTY. 
This is free software, and you are welcome to redistribute it under 
the terms of the GNU General Public License. 
For more information about these matters, see the files named COPYING. 

via: --/---ns/

Read next

急成長を遂げるファーウェイの欧州エンタープライズ・ビジネスは、CeBIT 2014でも注目に値する。

1月14日、ファーウェイはドイツのミュンヘンで開催された2014年国際家電・情報・通信見本市のプレショーウォームアップカンファレンスに参加しました。このプレショーイベントでファーウェイは、2013年の欧州エンタープライズ事業の急成長を表明し、CeBITでアジャイルネットワークインフラ、ビッグデータ、eLTEブロードバンドトランキングシステムなどの分野をカバーする最新技術を取り入れた一連のエンタープライズICT製品とソリューションを間もなく発表すると述べました。さらに、ファーウェイはCeBITで、2013年のエンタープライズ事業の事業展開状況や、ファーウェイのエンタープライズ事業の未来志向の発展戦略についても発表する予定です。

Jan 20, 2016 · 2 min read