Linuxのkillコマンドの使い方|プロセス終了・シグナル指定・注意点を解説

killコマンドとは 2026

「アプリケーションがフリーズして操作できない」「バックグラウンドで動き続けているプロセスを止めたい」——Linuxでこうした場面に対応するための基本コマンドがkillです。

killコマンドは名前の通り「プロセスを終了する」コマンドですが、強制終了だけでなく、様々なシグナルを送ることでプロセスの動作を細かく制御できます。この記事では、基本的な使い方からシグナルの種類・プロセス検索との組み合わせ・注意点まで体系的に解説します。

killコマンドとは

killコマンドとは

基本概念と役割

killコマンドは、Linuxで動作しているプロセスにシグナルを送信するコマンドです。最も一般的な用途はプロセスの終了ですが、厳密には「プロセスを殺す(kill)」だけでなく、「シグナルを送信する」ことが本来の役割です。

📌 この記事の手順はUbuntu 20.04/22.04・CentOS 7/8・RHEL系のLinux環境を対象としています。

プロセスID(PID)を指定して終了する仕組み

Linuxでは起動しているすべてのプロセスに一意のPID(プロセスID)が割り当てられます。killコマンドはこのPIDを指定してシグナルを送信します。

# 基本的な構文
kill [オプション] PID

# PIDの確認(実行中のプロセス一覧を表示)
ps aux | grep nginx

プロセス管理の基本ツールとしての位置付け

killはプロセス管理コマンド群の中核をなすコマンドです。関連コマンドとの役割分担は以下の通りです。

コマンド 役割
kill PIDを指定してシグナルを送信
pkill プロセス名でシグナルを送信
killall プロセス名と一致するすべてのプロセスを終了
ps 実行中のプロセスとPIDを確認
pgrep プロセス名からPIDを取得
top / htop プロセスをリアルタイムで監視

killコマンドの基本的な使い方

killコマンドの基本的な使い方

プロセスIDを指定して終了

kill PID の基本例

最もシンプルなkillコマンドの使い方です。シグナルを指定しない場合、デフォルトでSIGTERM(15)が送信され、プロセスに正常終了を促します。

# 基本的な終了コマンド(SIGTERM送信)
kill 1234

# 複数のPIDを一度に指定
kill 1234 5678 9012

# 終了後にプロセスが消えたか確認
ps aux | grep 1234

killコマンドの基本的な使い方の詳細はこちらの記事も参考になります。

現在のユーザー権限で終了可能なプロセス

一般ユーザーは自分が起動したプロセス(同じUIDを持つプロセス)にのみシグナルを送れます。他のユーザーのプロセスや、システムプロセスへのkillは権限エラーになります。

# 自分のプロセスを確認
ps aux | grep $(whoami)

# 権限不足の場合のエラー例
kill 1
# -bash: kill: (1) - Operation not permitted

sudoで管理者権限が必要な場合

他のユーザーが起動したプロセスやシステムデーモンを終了する場合はsudo権限が必要です。

# sudo権限でkillを実行
sudo kill 1234

# rootとして実行中のNginxを停止する場合
sudo kill $(pgrep nginx)

# 権限を確認してからkillする
ps aux | grep nginx
# nginx    1234  0.0  0.1  ... nginx: master process
sudo kill 1234

sudo killを実行する前に、対象のPIDが正しいかを必ず確認してください。誤ったPIDにsudo killを実行すると、重要なシステムプロセスを終了してしまう危険があります。

シグナルを指定したkillコマンド

シグナルを指定したkillコマンド

SIGTERM(15)で通常終了

SIGTERMはkillコマンドのデフォルトシグナルです。プロセスに「終了してください」というリクエストを送ります。プロセスはこのシグナルを受け取ると、処理中のデータを保存してからクリーンに終了します。

# SIGTERMを明示的に送信(以下3つは同じ意味)
kill 1234
kill -15 1234
kill -SIGTERM 1234
kill -s SIGTERM 1234

SIGTERMはプロセスが無視できるシグナルです。フリーズしているプロセスや、シグナルハンドラーでSIGTERMを無視するように設定されたプロセスには効果がありません。

SIGKILL(9)で強制終了

SIGKILLはプロセスを問答無用で強制終了します。OSカーネルが直接プロセスを終了させるため、プロセスはシグナルを無視・ブロック・ハンドリングできません。

# SIGKILL(強制終了)の送信(以下2つは同じ意味)
kill -9 1234
kill -SIGKILL 1234

SIGKILL(-9)はプロセスに後処理の機会を与えません。一時ファイルが残る・ファイルシステムの整合性が崩れる・データが失われるリスクがあります。SIGTERMで終了しない場合の最終手段として使用してください。

その他のシグナル一覧(SIGHUP, SIGINTなど)

killで送信できる主なシグナルの一覧です。

シグナル名 番号 主な用途
SIGHUP 1 設定ファイルの再読み込み(デーモンの再起動)
SIGINT 2 割り込み(Ctrl+Cと同等)
SIGQUIT 3 コアダンプを生成して終了
SIGTERM 15 通常終了(デフォルト)
SIGKILL 9 強制終了(無視不可)
SIGSTOP 19/17 プロセスを一時停止(無視不可)
SIGCONT 18/25 停止したプロセスを再開
SIGUSR1 10 ユーザー定義シグナル1(アプリ固有の処理)
SIGUSR2 12 ユーザー定義シグナル2(アプリ固有の処理)
# 使用可能なシグナル一覧を表示
kill -l

# SIGHUPでNginxの設定を再読み込み(再起動なし)
sudo kill -1 $(pgrep nginx)
# または
sudo kill -HUP $(pgrep nginx)

シグナル指定の書き方

kill -s SIGKILL PID または kill -9 PID

シグナルを指定する方法は複数あります。

# 方法1: 番号で指定
kill -9 1234

# 方法2: シグナル名で指定
kill -SIGKILL 1234

# 方法3: -sオプションでシグナル名を指定
kill -s SIGKILL 1234

# 方法4: SIG接頭辞なしで指定
kill -KILL 1234

# すべて同じ動作(SIGKILLの送信)

プロセスの検索とkillの併用

psコマンドでPIDを確認

psコマンドで実行中のプロセスとそのPIDを確認します。psコマンドとkillを組み合わせたプロセス管理の詳細はこちらの記事も参考になります。

# 全プロセスを表示
ps aux

# 特定のプロセス名でフィルタリング
ps aux | grep nginx

# 出力例
# USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
# root      1234  0.0  0.1  55680  2344 ?        Ss   10:00   0:00 nginx: master

# PID列(2列目)の値を確認してkillに使用
kill 1234

pgrepコマンドでプロセス名からPIDを取得

pgrepはプロセス名からPIDを直接取得できるコマンドです。psとgrepの組み合わせより簡潔に書けます。

# プロセス名からPIDを取得
pgrep nginx
# 出力例: 1234

# 詳細情報とともに表示(-lオプション)
pgrep -l nginx
# 出力例: 1234 nginx

# pgrepの結果をkillに直接渡す
kill $(pgrep nginx)

# 完全一致で検索(-xオプション)
pgrep -x nginx

killとgrepを組み合わせた終了方法

psとgrepとkillを組み合わせてプロセスを検索・終了する実践的なパターンです。

# ps + grep + awkでPIDを抽出してkill
ps aux | grep nginx | grep -v grep | awk '{print $2}' | xargs kill

# 解説:
# grep -v grep: grepコマンド自体をフィルタリング
# awk '{print $2}': 2列目(PID)のみ抽出
# xargs kill: 抽出したPIDをkillに渡す

# pkillを使うとさらに簡潔に書ける
pkill nginx        # SIGTERMで終了
pkill -9 nginx     # SIGKILLで強制終了

# killallを使う方法
killall nginx      # プロセス名に一致するすべてを終了
killall -9 nginx   # 強制終了

Tips: pkillとkillallはプロセス名でシグナルを送れるため、PIDを調べる手間が省けます。ただし同名のプロセスが複数ある場合は全件に送信されるため、対象を絞る場合はpgrep→killの流れを使いましょう。

See also  Wordでヘッダーを設定・編集する方法|文書上部に情報を表示する手順

killコマンドの注意点

重要なシステムプロセスを誤って終了しない

PID 1はinitまたはsystemd(Linuxの最初のプロセス)です。このプロセスにSIGKILLを送るとシステム全体がクラッシュします。一般的にはカーネルが保護していますが、意図しない操作には注意が必要です。

# 特に注意が必要なプロセス
PID 1   → init/systemd(絶対に終了しない)
PID 2   → kthreadd(カーネルスレッド)

# 実行前に対象プロセスを必ず確認
ps aux | grep PID番号

# 不明なPIDへの操作前に詳細を確認
cat /proc/1234/cmdline  # プロセスのコマンドを確認
ls -la /proc/1234/exe   # 実行ファイルのパスを確認

sudo権限が必要な場合の扱い

他のユーザーのプロセスやシステムデーモンを終了する場合はsudoが必要です。sudoを使う場合は特に対象PIDの確認を慎重に行います。

# 安全な手順
# 1. まず対象プロセスを確認
sudo ps aux | grep サービス名

# 2. PIDが正しいことを確認
sudo cat /proc/対象PID/cmdline

# 3. SIGTERMから試す
sudo kill -15 対象PID

# 4. 終了しない場合のみSIGKILL
sudo kill -9 対象PID

kill後にプロセスが残るケースと対処

SIGTERMを送っても以下の理由でプロセスが残ることがあります。killコマンドでプロセスが終了しない場合の対処法はこちらの記事も参考になります。

  • プロセスがSIGTERMを無視するよう設定されている
  • プロセスがフリーズしてシグナルを処理できない状態になっている
  • ゾンビプロセス(すでに終了しているが親プロセスが回収していない)
# kill後にプロセスを確認
ps aux | grep 対象PID

# ゾンビプロセスの確認(STATがZのプロセス)
ps aux | grep 'Z'

# ゾンビプロセスは親プロセスを終了することで解消
pstree -p | grep ゾンビのPID  # 親PIDを確認
kill -9 親PID

強制終了は最終手段として使用

SIGKILL(-9)を使う場面の判断基準です。

状況 推奨する対応
通常のプロセス終了 kill(SIGTERM)
SIGTERMで終了しない場合 数秒待ってから再度SIGTERM → それでも残る場合SIGKILL
完全にフリーズしている kill -9(最終手段)
データベース・ファイルサーバー 専用の停止コマンドを使う(systemctl stop など)

killコマンドの応用例

特定ユーザーのプロセスを一括終了

特定ユーザーが起動したすべてのプロセスを終了する場合の方法です。killコマンドの応用的な使い方の実例はこちらの記事も参考になります。

# 特定ユーザー(testuser)のすべてのプロセスを終了
pkill -u testuser

# 特定ユーザーのプロセスをSIGKILLで強制終了
pkill -9 -u testuser

# ユーザーのPID一覧を確認
pgrep -u testuser

# ユーザーのプロセス詳細を確認
ps -u testuser

デーモンやバックグラウンドプロセスの停止

Webサーバー・データベースなどのデーモンプロセスの停止には、killより専用コマンドを優先しますが、応答しない場合はkillを使います。

# 推奨: systemctlで正常停止(データ保護)
sudo systemctl stop nginx
sudo systemctl stop mysql

# systemctlが効かない場合: SIGTERMで停止
sudo kill -15 $(pgrep nginx)

# バックグラウンドジョブの停止
jobs          # バックグラウンドジョブ一覧を表示
# [1]+  Running    long_process.sh &

# バックグラウンドジョブのPIDを確認してkill
kill %1       # ジョブ番号を指定(%1はジョブ番号1を意味)
# または
kill $(jobs -p)  # すべてのバックグラウンドジョブを終了

スクリプト内での自動プロセス管理

シェルスクリプトでプロセスを自動管理するパターンです。

#!/bin/bash
# プロセスを安全に終了するスクリプト例

TARGET_PROCESS="myapp"
TIMEOUT=10  # 秒数

# プロセスが動いているか確認
if pgrep -x "$TARGET_PROCESS" > /dev/null; then
  echo "${TARGET_PROCESS}を終了します(SIGTERM)"
  pkill -SIGTERM "$TARGET_PROCESS"

  # タイムアウトまで待機
  ELAPSED=0
  while pgrep -x "$TARGET_PROCESS" > /dev/null && [ $ELAPSED -lt $TIMEOUT ]; do
    sleep 1
    ELAPSED=$((ELAPSED + 1))
    echo "待機中... ${ELAPSED}秒"
  done

  # まだ残っている場合はSIGKILL
  if pgrep -x "$TARGET_PROCESS" > /dev/null; then
    echo "タイムアウト。SIGKILLで強制終了します"
    pkill -SIGKILL "$TARGET_PROCESS"
  else
    echo "${TARGET_PROCESS}が正常に終了しました"
  fi
else
  echo "${TARGET_PROCESS}は実行されていません"
fi

ログ出力やエラーハンドリングとの併用

#!/bin/bash
# PIDファイルを使ったプロセス管理

PID_FILE="/var/run/myapp.pid"
LOG_FILE="/var/log/myapp.log"

stop_process() {
  if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")

    # PIDが有効かどうかを確認
    if kill -0 "$PID" 2>/dev/null; then
      echo "$(date): プロセス${PID}を停止します" >> "$LOG_FILE"
      kill -15 "$PID"
      rm -f "$PID_FILE"
      echo "$(date): 停止完了" >> "$LOG_FILE"
    else
      echo "$(date): PIDファイルが古いため削除します" >> "$LOG_FILE"
      rm -f "$PID_FILE"
    fi
  else
    echo "$(date): PIDファイルが見つかりません" >> "$LOG_FILE"
  fi
}

stop_process

また、Linuxコマンドとプロセス管理に関する実践ガイドはkakiro-webでも発信しています。

まとめ

killコマンドはLinuxでプロセスを終了する基本ツール

killコマンドはPIDを指定してプロセスにシグナルを送信するLinuxの基本コマンドです。デフォルトのSIGTERMによる通常終了から、強制終了のSIGKILL、設定リロードのSIGHUPまで、シグナルによって用途が異なります。

シグナル指定で安全に終了させる

  • 通常はkill PID(SIGTERM)から試す
  • SIGTERMで終了しない場合のみkill -9 PID(SIGKILL)を使う
  • デーモンの設定リロードにはkill -1 PID(SIGHUP)が有効
  • 実行前に必ずps auxcat /proc/PID/cmdlineで対象を確認する
  • sudo killは特に慎重に実行し、重要なシステムプロセスを誤って終了しない
See also  クリップボードとは?表示方法・履歴機能・便利な使い方を解説

検索コマンドと併用して効率的にプロセス管理

killコマンドはps・pgrep・pkill・killallなどのコマンドと組み合わせることで真価を発揮します。特にkill $(pgrep プロセス名)のパターンと、スクリプトでSIGTERM→待機→SIGKILL の順で安全に終了を試みる処理を組み合わせることで、本番環境でも安全で効率的なプロセス管理が実現します。

Copied title and URL