🎯 この記事で学べること
- 1`kill`コマンドの基本的な使い方をマスターできます
- 2シグナルの種類(TERM、KILL、HUPなど)と使い分けがわかります
- 3プロセスを安全に終了させる段階的なアプローチを身につけられます
- 4pkillやkillallなどの関連コマンドの使い方を学べます
- 5トラブルシューティングとベストプラクティスを理解できます
読了時間: 約9分
killコマンドって怖くない!
こんにちは!今回はkill
コマンドについて学んでいきましょう。
「kill」という名前を聞くと、ちょっと物騒に感じるかもしれませんね。でも心配しないでください!kill
コマンドは、実はプロセスに「お願い」を送るコマンドなんです。「終了してください」とか「設定を読み直してください」とか、いろいろなメッセージ(シグナル)を送ることができるんですよ。
基本的な使い方
まずはシンプルに
kill
コマンドの基本形は「kill プロセスID」です:
# プロセスID 1234 に終了をお願いする
$ kill 1234
# 複数のプロセスに同時にお願いする
$ kill 1234 5678 9012
何もオプションを付けないと、kill
コマンドは「TERM(終了してください)」というシグナルを送ります。これは「お行儀よく終了してね」というお願いです。
プロセスIDの調べ方
プロセスをkillするには、まずプロセスID(PID)を知る必要があります:
# psコマンドで探す
$ ps aux | grep firefox
user 1234 0.5 2.1 firefox
# pidofコマンドで直接取得
$ pidof firefox
1234
# pgrepコマンドでパターン検索
$ pgrep -l fire
1234 firefox
ps aux | grep プロセス名
は最もよく使われる方法です。表示されたPIDを使ってkillできます!
シグナルの種類を理解しよう
主要なシグナル一覧
プロセスに送れるシグナルにはいろいろな種類があります:
| シグナル番号 | シグナル名 | 意味 | 使いどころ | |------------|-----------|------|-----------| | 1 | HUP | ハングアップ | 設定ファイルの再読み込み | | 2 | INT | 割り込み | Ctrl+Cと同じ効果 | | 9 | KILL | 強制終了 | どうしても終了しない時の最終手段 | | 15 | TERM | 終了要求 | 通常の終了(デフォルト) | | 18 | CONT | 再開 | 停止したプロセスを再開 | | 19 | STOP | 停止 | プロセスを一時停止 |
シグナルの指定方法
シグナルは番号でも名前でも指定できます:
# 番号で指定
$ kill -9 1234
# 名前で指定(こちらがおすすめ!)
$ kill -TERM 1234
$ kill -HUP 5678
$ kill -KILL 9012
# 使えるシグナル一覧を見る
$ kill -l
kill -9
(SIGKILL)は強制終了です。プロセスは何も保存せずに即座に終了するので、データが失われる可能性があります。最後の手段として使いましょう!
🎮 理解度チェック
Q1: kill 1234
を実行した時、どのシグナルが送られますか?
安全にプロセスを終了する方法
段階的アプローチ(これが大事!)
プロセスを終了する時は、いきなり強制終了するのではなく、段階的に行いましょう:
# ステップ1: まず普通にお願いする(TERM)
$ kill -TERM 1234
# ステップ2: 5秒ほど待つ
$ sleep 5
# ステップ3: まだ生きているか確認
$ ps -p 1234
# プロセスが表示されたら、まだ動いている
# ステップ4: それでもダメなら強制終了
$ kill -KILL 1234
実際のスクリプトにするとこんな感じです:
#!/bin/bash
# 安全なkillスクリプト
PID=$1
echo "プロセス $PID に終了をお願いしています..."
kill -TERM $PID
# 5秒待つ
for i in {1..5}; do
if ! ps -p $PID > /dev/null; then
echo "プロセスは正常に終了しました"
exit 0
fi
sleep 1
done
echo "プロセスが応答しません。強制終了します..."
kill -KILL $PID
設定の再読み込み(HUPシグナル)
多くのサーバープログラムは、HUPシグナルで設定を再読み込みします:
# nginxの設定を再読み込み
$ sudo kill -HUP $(pidof nginx)
# または
$ sudo nginx -s reload # 専用コマンドがある場合
HUPシグナルは「Hang UP(電話を切る)」の略ですが、現在は「設定を読み直して」という意味で使われることが多いです。
便利な関連コマンド
pkillコマンド(名前でkill)
プロセス名で直接killできる便利なコマンドです:
# firefoxという名前のプロセスをすべて終了
$ pkill firefox
# パターンマッチで終了
$ pkill -f "python script.py"
# 特定ユーザーのプロセスだけ
$ pkill -u username chrome
killallコマンド(全部kill)
指定した名前のプロセスをすべて終了します:
# chromeプロセスをすべて終了
$ killall chrome
# 確認しながら終了(-i オプション)
$ killall -i firefox
Kill firefox(1234) ? (y/N)
# 終了を待つ(-w オプション)
$ killall -w python
pkill
の方がkillall
より新しく、より柔軟です。基本的にはpkill
を使うことをおすすめします!
🎮 理解度チェック
Q2: プロセスを安全に終了させる時、最初に送るべきシグナルは?
実践的な使い方
ゾンビプロセスの対処
ゾンビプロセス(終了したけど親が回収していない)を見つけたら:
# ゾンビプロセスを探す
$ ps aux | grep defunct
user 1234 0.0 0.0 0 0 ? Z 10:00 0:00 [zombie] <defunct>
# 親プロセスを確認
$ ps -o ppid= -p 1234
5678
# 親プロセスにシグナルを送る
$ kill -CHLD 5678
CPU使用率の高いプロセスを終了
# CPU使用率TOP10を確認
$ ps aux --sort=-%cpu | head -10
# 問題のプロセスを特定したら
$ kill -TERM 問題のPID
# スクリプトで自動化
#!/bin/bash
# CPU使用率が80%を超えるプロセスを警告
ps aux | awk '$3 > 80.0 {
print "警告: " $2 " (" $11 ") がCPUを " $3 "% 使用中"
}'
バックグラウンドジョブの制御
# 長時間かかるコマンドをバックグラウンドで実行
$ long_command &
[1] 1234
# ジョブ一覧を確認
$ jobs
[1]+ Running long_command &
# ジョブ番号でkill(%を付ける)
$ kill %1
# 最後のジョブをkill
$ kill %%
トラブルシューティング
よくある問題と解決法
「Permission denied」エラー
$ kill 1234
-bash: kill: (1234) - Operation not permitted
# 解決法: 他人のプロセスにはsudoが必要
$ sudo kill 1234
プロセスが終了しない
# プロセスの状態を確認
$ ps aux | grep 1234
user 1234 0.0 0.0 D ... # Dは「割り込み不可能なスリープ」
# この場合、プロセスはI/O待ちなどで、KILLシグナルも効かない
# システムの再起動が必要な場合もある
誤って重要なプロセスを終了してしまった
# サービスとして登録されている場合
$ sudo systemctl restart サービス名
# 手動で再起動
$ /usr/bin/プログラム名 &
# ログを確認
$ sudo journalctl -xe
🎮 理解度チェック
Q3: pkill -f "python script.py"
は何をするコマンドですか?
ベストプラクティス
killする前の確認リスト
-
正しいプロセスか確認
$ ps -fp 1234
-
何をしているか確認
$ lsof -p 1234 # 開いているファイルを確認
-
段階的にシグナルを送る
- TERM → 待つ → KILL
-
ログを残す
$ logger "Killing process 1234 (firefox)" $ kill 1234
安全のためのエイリアス
# ~/.bashrcに追加
alias kill='kill -TERM' # デフォルトを明示的に
alias killall='killall -i' # 確認付きに
# 危険なコマンドには確認を
careful_kill() {
echo "本当に $1 を終了しますか? (y/N)"
read answer
if [[ $answer == "y" ]]; then
kill "$@"
fi
}
📝 まとめ
今回はkill
コマンドについて学びました!
kill
はプロセスにシグナルを送るコマンド(単なる「殺す」コマンドではない)- デフォルトはTERMシグナル(丁寧な終了要求)
- 段階的アプローチ:TERM → 待つ → KILL が基本
pkill
やkillall
で名前指定もできる- 実行前の確認と、適切なシグナルの選択が大切
kill
コマンドは強力なツールですが、正しく使えば安全にプロセスを管理できます。まずはTERMシグナルから始めて、必要な時だけKILLを使うようにしましょう!
次はtopコマンドでリアルタイムのプロセス監視方法を学びます。どのプロセスがリソースを使っているか、視覚的に確認できるようになりますよ!
YouTube動画で復習
動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。
kill
コマンドは名前は怖いけど、実際は「プロセスとお話しする」コマンドです。適切に使えば、システム管理の強い味方になってくれますよ!