プロセス管理

Linux killコマンド入門|プロセスにシグナルを送って終了する

Linux kill プロセス管理

Linux killコマンド入門
プロセスにシグナルを送って終了する

killコマンドは、実行中のプロセスにシグナルを送信して終了や制御を行うコマンドです。応答しなくなったプロセスの強制終了やサービスの再起動に使います。

こんな人向けの記事です

  • フリーズしたプロセスを終了させたい人
  • シグナルの種類と使い分けを学びたい人
  • サーバー管理でプロセス制御を行いたい人

Step 1killコマンドの基本

killコマンドは「プロセスID(PID)」を指定してシグナルを送ります。まずPIDを調べてからkillを実行します。

ターミナル
# プロセスIDを調べる
ps aux | grep nginx

# プロセスを終了(デフォルトはSIGTERM)
kill 1234
killの仕組み

killは「プロセスを殺す」のではなく「シグナルを送る」コマンドです。デフォルトのSIGTERMシグナルは、プロセスに「正常に終了してください」と要求します。

Step 2主要なシグナル一覧

よく使うシグナルをまとめます。

シグナル番号説明
SIGTERM15正常終了を要求(デフォルト)
SIGKILL9強制終了(プロセスは拒否できない)
SIGHUP1設定ファイルの再読み込み
SIGSTOP19プロセスを一時停止
SIGCONT18停止したプロセスを再開
SIGINT2割り込み終了(Ctrl+Cと同じ)
ターミナル
# シグナル一覧を表示
kill -l

Step 3プロセスを終了する

状況に応じて適切なシグナルを使い分けます。

ターミナル
# 正常終了を要求(まずこれを試す)
kill 1234
kill -SIGTERM 1234
kill -15 1234

# 強制終了(応答しない場合の最終手段)
kill -9 1234
kill -SIGKILL 1234

# 設定の再読み込み(サービス再起動なし)
kill -HUP 1234
kill -9 は最終手段

kill -9(SIGKILL)はプロセスが後処理をする機会を与えずに強制終了します。データ損失の可能性があるため、まず kill(SIGTERM)を試し、それでも終了しない場合にのみ使いましょう。

Step 4killallとpkill

PIDではなくプロセス名で指定できる便利なコマンドもあります。

ターミナル
# プロセス名で終了(完全一致)
killall nginx

# プロセス名で終了(部分一致)
pkill -f "python app.py"

# 特定ユーザーのプロセスを終了
pkill -u username

# 強制終了
killall -9 nginx
killall vs pkill
  • killall:コマンド名の完全一致で検索
  • pkill:コマンドライン全体の部分一致で検索(-fオプション)

Step 5実践的な活用例

サーバー管理でよく使うkillコマンドのパターンです。

ターミナル
# ポート8080を使っているプロセスを終了
kill $(lsof -t -i:8080)

# 安全な終了手順(段階的に試す)
kill 1234          # 1. まずSIGTERM
sleep 5            # 2. 5秒待つ
kill -9 1234       # 3. まだ動いていたら強制終了

# Nginxの設定再読み込み(ダウンタイムなし)
sudo nginx -s reload