Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
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
よく使うシグナル一覧
| シグナル | 番号 | 概要 |
|---|---|---|
| SIGTERM | 15 | 正常終了を要求します(デフォルト)。プロセスはクリーンアップしてから終了できます。 |
| SIGKILL | 9 | 強制終了します。プロセスは無視できません。クリーンアップなしで即座に終了します。 |
| SIGINT | 2 | 割り込み(Ctrl+C と同じ)です。 |
| SIGHUP | 1 | ハングアップシグナルです。多くのデーモンは設定ファイルの再読み込みに使います。 |
| SIGSTOP | 19 | プロセスを一時停止します(無視不可)。 |
| SIGCONT | 18 | 停止中のプロセスを再開します。 |
| SIGUSR1/2 | 10/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』でシグナルを送らずにプロセスの存在を確認できます。スクリプトでのプロセス監視に便利です。
kill 12345 && echo "シグナル送信成功"
sleep 1
if ! kill -0 12345 2>/dev/null; then
echo "プロセスが終了しました"
fi
シグナル送信成功 プロセスが終了しました
バックグラウンドプロセスの PID を取得して停止する例です。
sleep 100 & bg_pid=$! echo "バックグラウンド PID: $bg_pid" kill "$bg_pid" echo "停止シグナルを送りました"
バックグラウンド PID: 12348 停止シグナルを送りました
概要
まずSIGTERM(-15)を送ってプロセスに正常終了の機会を与え、それでも終了しない場合にSIGKILL(-9)を使うのが作法です。SIGKILL は開いているファイルのフラッシュやリソースの解放をスキップするため、データが壊れる可能性があります。
kill -0 PID はシグナルを送らずプロセスの存在確認だけを行います(終了ステータス0=存在する, 非0=存在しない)。スクリプトでのプロセス監視に便利です。
プロセスの確認には ps / top / htop を、バックグラウンド実行には &(バックグラウンド実行) を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。