言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. kill / pkill / killall

kill / pkill / killall

『kill』はプロセスID(PID)を指定してシグナルを送ります。『pkill』はプロセス名でシグナルを送り、『killall』は名前が完全一致するプロセス全体にシグナルを送ります。プロセスの停止・再起動・設定の再読み込みなどに使います。

構文

kill で PID を指定してシグナルを送ります。

kill PID
kill -シグナル名 PID
kill -シグナル番号 PID

pkill でプロセス名を検索してシグナルを送ります。

pkill プロセス名
pkill -シグナル プロセス名
pkill -u ユーザー名 プロセス名

killall で名前が完全一致するプロセスにシグナルを送ります。

killall プロセス名
killall -シグナル プロセス名

シグナル一覧を確認します。

kill -l

よく使うシグナル一覧

シグナル番号概要
SIGTERM15正常終了を要求します(デフォルト)。プロセスはクリーンアップしてから終了できます。
SIGKILL9強制終了します。プロセスは無視できません。クリーンアップなしで即座に終了します。
SIGINT2割り込み(Ctrl+C と同じ)です。
SIGHUP1ハングアップシグナルです。多くのデーモンは設定ファイルの再読み込みに使います。
SIGSTOP19プロセスを一時停止します(無視不可)。
SIGCONT18停止中のプロセスを再開します。
SIGUSR1/210/12ユーザー定義シグナルです。アプリケーション独自の処理に使います。

サンプルコード

以下の前提でサンプルを説明します。『sleep 1000』が PID 12345 で実行中です。

ps aux | grep "sleep" | grep -v grep
alice  12345  0.0  0.0  5536  1024 pts/0  S  10:00  0:00 sleep 1000

SIGTERM で正常終了を要求します。シグナルを省略するとデフォルトの SIGTERM(15)が送られます。

kill 12345

応答しないプロセスには SIGKILL(-9)で強制終了します。クリーンアップなしで即座に停止します。

kill -9 12345
kill -SIGKILL 12345   # 同じ意味

nginx に SIGHUP を送って設定ファイルを再読み込みさせます。多くのデーモンはこのシグナルで設定をリロードします。

kill -HUP $(cat /var/run/nginx.pid)

『pkill』でプロセス名を指定して停止します。PID を調べる手間が省けます。

pkill sleep          # "sleep" を含む名前のプロセスに SIGTERM
pkill -9 myapp       # 強制終了
pkill -u www-data php-fpm   # 特定ユーザーのプロセスを停止

『killall』は名前が完全一致するプロセスすべてにシグナルを送ります。

killall nginx

『kill -0』でシグナルを送らずにプロセスの存在を確認できます。スクリプトでのプロセス監視に便利です。

check_process.sh
kill 12345 && echo "シグナル送信成功"
sleep 1
if ! kill -0 12345 2>/dev/null; then
    echo "プロセスが終了しました"
fi
bash check_process.sh
シグナル送信成功
プロセスが終了しました

バックグラウンドプロセスの PID を取得して停止する例です。

kill_bg.sh
sleep 100 &
bg_pid=$!
echo "バックグラウンド PID: $bg_pid"
kill "$bg_pid"
echo "停止シグナルを送りました"
bash kill_bg.sh
バックグラウンド PID: 12348
停止シグナルを送りました

概要

まず『SIGTERM(-15)』を送ってプロセスに正常終了の機会を与え、それでも終了しない場合に『SIGKILL(-9)』を使うのが作法です。SIGKILL は開いているファイルのフラッシュやリソースの解放をスキップするため、データが壊れる可能性があります。

$ kill -0 PID』はシグナルを送らずプロセスの存在確認だけを行います(終了ステータス0=存在する, 非0=存在しない)。スクリプトでのプロセス監視に便利です。

プロセスの確認には ps / top / htop を、バックグラウンド実行には &(バックグラウンド実行) を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。