本文へスキップ
BecomeCoder

サーバーコース · 第2章 サービスとプロセス · レッスン7

kill ― プロセスを止める

ブラウザで完結

導入

ps で暴走しているプロセスを見つけたら、次は 止める 番です。プロセスに「終わってください」という合図(シグナル)を送るのが kill。名前は物騒ですが、実体は「プロセスへシグナルを送るコマンド」で、止める以外の使い方もあります。

説明

まず ps aux で全体を眺めると、user が起動した python3 train.pyCPU をほぼ 100% 食っている(暴走している)のが見つかります。左の PID 列の番号を控えます。

ps aux

python3 train.pyPID 20482050 の2つ。まずは片方に、既定のシグナル TERM(終了のお願い) を送ってみましょう。kill に番号を渡すだけです。

kill 2048
ps aux

一覧から 2048 が消えました。kill は成功しても 何も表示しません(本物と同じ)。結果は ps で確かめます。これが「止める → ps で確認」の基本の流れです。

kill の既定 TERM は「片付けをしてから終わってね」という お行儀のよいお願い です。それでも止まらない頑固なプロセスには、-9KILL)で強制終了させます。

kill -9 2050
ps aux

TERMKILL の違いはここが肝心です。

flowchart TD
    A["kill PID<br/>(既定: TERM / 15)"] --> B["プロセスに『終わって』と頼む<br/>後片付けの時間を与える"]
    C["kill -9 PID<br/>(KILL / 9)"] --> D["問答無用で即・強制終了<br/>後片付けはできない"]

シグナルには番号と名前があり、kill -l(list)で一覧を見られます。9KILL15TERM です。

kill -l

なお、他人のプロセスは勝手に止められません。たとえば root が動かしている nginxPID 640)を一般ユーザーのまま止めようとすると、断られます(第5章の su - / sudo で root になれば話は別です)。

kill 640

-9(KILL)は最後の手段です。後片付け(ファイルの保存やロックの解放)をさせずに落とすので、まずは普通の kill(TERM)を試し、それでもダメなときだけ -9 を使う——というのが安全な順番です。

やってみよう

ps auxpython3 train.py(暴走中)の PID を確かめ、kill 2048 で片方を止めて ps aux から消えることを見てください。もう片方を kill -9 2050 で強制終了する違いも試しましょう。kill 640(root の nginx)が「許可されていない」と断られること、kill -l でシグナル一覧が出ることも確認してください。

演習

暴走している python3 train.pyPID 2048)に、既定のシグナルを送って終了させてください。

ヒント1を見る

kill に PID(プロセス番号)を渡します。既定なのでオプションは要りません。

ヒント2を見る

kill 2048

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。