プロセスを止める最終手段killコマンドの種類・シグナルの使い方

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

やばい!処理が固まった!どうしよう!
バッチ処理が超遅い!一旦止めたい…

そんなときはプロセスを終了するのも 1 つの手です…
(自己判断でお願いしますね)

今回は Linux コマンドで PC 処理を終わらせる方法、
すなわち kill コマンドでプロセスを終了させる方法について解説します!

kill コマンドの種類

プロセスを終了させるには、下記のコマンドを使います。

  • kill
    • プロセス ID で対象を指定する
  • killall
    • コマンド名で対象を指定する
    • そのコマンド名で動いているプロセス全てを終了する

シグナルの種類

kill 系のコマンドはプロセスに対して、
シグナルと呼ばれるメッセージを送ります。

そのシグナルの意味を通じてプロセスとやりとりします。

シグナルはたくさん種類があって kill -l コマンドで確認できますが、
大きくこの 2 つだけ知っておけば大丈夫です。

シグナル意味
9 または SIGKILL強制終了
15 または SIGTERM正常終了

kill のデフォルトシグナル

kill コマンドでシグナルを指定しない場合、
デフォルトでシグナル 15 (正常終了) が使われます。

kill コマンドの使い方

kill -[シグナル] [プロセスID] と覚えれば大丈夫です。
プロセス ID は半角スペース区切りで複数指定できます。

先述しましたが、正常終了する場合はシグナルを省略できます。

まずプロセス ID を調べる

# Docker のプロセスを kill したいので Docker のプロセス ID を調べる
ps aux | grep docker

# pgrep コマンドを使うとシンプルにそのプロセス ID だけ表示してくれます
pgrep -f docker -G docker

調べたプロセス ID で kill する

プロセス ID を 1234 とする場合の例です。

# 正常終了
kill 1234
kill -15 1234
kill -SIGTERM 1234

# 強制終了
kill -9 1234
kill -SIGKILL 1234

killall コマンドの使い方

killall -[シグナル] [コマンド名] と覚えれば大丈夫です。
半角スペース区切りでコマンド名は複数指定できます。

こちらも正常終了する場合はシグナルを省略できます。

killall docker
killall -9 docker

pkill コマンドの使い方

あまり利用機会はないと思いますが、
pgrep コマンドと似た記述ができる pkill コマンドというのもあります。

こちらは pgrep 結果のプロセス ID をまとめて kill することができます。
# 以下の pgrep 結果を pkill でまとめて kill することができる
# pgrep -f docker -G docker docker

pkill -f docker -G docker

しかし peco を使った kill が一番ラクです

前回の記事内容ですが、
peco というライブラリを使って pk コマンドを実装しています。

こちらはインクリメンタルサーチでプロセスを絞って Enter を叩くと、
即座にそのプロセスを kill します。

あまりに簡単すぎて少し慎重にならないといけませんが、
よければ試してみてください。

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメント

コメントを残す

*