導入
ps で暴走しているプロセスを見つけたら、次は 止める 番です。プロセスに「終わってください」という合図(シグナル)を送るのが kill。名前は物騒ですが、実体は「プロセスへシグナルを送るコマンド」で、止める以外の使い方もあります。
説明
まず ps aux で全体を眺めると、user が起動した python3 train.py が CPU をほぼ 100% 食っている(暴走している)のが見つかります。左の PID 列の番号を控えます。
ps aux
python3 train.py は PID 2048 と 2050 の2つ。まずは片方に、既定のシグナル TERM(終了のお願い) を送ってみましょう。kill に番号を渡すだけです。
kill 2048
ps aux
一覧から 2048 が消えました。kill は成功しても 何も表示しません(本物と同じ)。結果は ps で確かめます。これが「止める → ps で確認」の基本の流れです。
kill の既定 TERM は「片付けをしてから終わってね」という お行儀のよいお願い です。それでも止まらない頑固なプロセスには、-9(KILL)で強制終了させます。
kill -9 2050
ps aux
TERM と KILL の違いはここが肝心です。
flowchart TD
A["kill PID<br/>(既定: TERM / 15)"] --> B["プロセスに『終わって』と頼む<br/>後片付けの時間を与える"]
C["kill -9 PID<br/>(KILL / 9)"] --> D["問答無用で即・強制終了<br/>後片付けはできない"]
シグナルには番号と名前があり、kill -l(list)で一覧を見られます。9 が KILL、15 が TERM です。
kill -l
なお、他人のプロセスは勝手に止められません。たとえば root が動かしている nginx(PID 640)を一般ユーザーのまま止めようとすると、断られます(第5章の su - / sudo で root になれば話は別です)。
kill 640
-9(KILL)は最後の手段です。後片付け(ファイルの保存やロックの解放)をさせずに落とすので、まずは普通のkill(TERM)を試し、それでもダメなときだけ-9を使う——というのが安全な順番です。
やってみよう
ps aux で python3 train.py(暴走中)の PID を確かめ、kill 2048 で片方を止めて ps aux から消えることを見てください。もう片方を kill -9 2050 で強制終了する違いも試しましょう。kill 640(root の nginx)が「許可されていない」と断られること、kill -l でシグナル一覧が出ることも確認してください。
演習
暴走している python3 train.py(PID 2048)に、既定のシグナルを送って終了させてください。
ヒント1を見る
kill に PID(プロセス番号)を渡します。既定なのでオプションは要りません。
ヒント2を見る
kill 2048