導入
kill は「番号」で1つずつ止めます。でも同じプログラムが何個も動いていると、番号を1つずつ調べて打つのは面倒です。そこで 名前でまとめて 止められるのが pkill。ワーカーが大量に増えたときなどに重宝します。
説明
止める前に、まず 名前で PID を調べる pgrep(process grep)から入ると安全です。名前を渡すと、一致するプロセスの番号が並びます。
pgrep python3
2048 と 2050 の2つが返りました。-l を付けると名前も一緒に出るので、狙いが合っているか確認できます。
pgrep -l python3
狙いが正しいと分かったら、pkill 名前 で 一致するプロセスを一度に 止めます。番号を1つずつ打つ必要はありません。
pkill python3
pgrep python3
pgrep python3 が何も返さなくなりました(=もう動いていない)。pkill も kill と同じく、成功時は無言です。結果は pgrep や ps で確かめます。
kill と同じシグナル指定も使えます。強制終了なら -9 を添えます。
pkill -9 python3
pkill(と pgrep)は既定で プロセス名 を照合します。python3 train.py の「コマンドライン全体」(= train.py の部分)で探したいときは -f を付けます。
pkill -f train.py
flowchart LR
A["pgrep 名前<br/>まず番号を調べる"] --> B["pkill 名前<br/>一致を全部止める"]
B --> C["pgrep / ps<br/>止まったか確認"]
便利な反面、
pkillは 名前が一致するものを全部 止めます。pkill sshのつもりが自分のSSH接続まで巻き込む、といった事故もあり得ます。いきなりpkillせず、まずpgrepで「本当にこれだけか」を確かめてから止めるのが安全なやり方です。
やってみよう
pgrep python3 で2つの PID が返ることを確かめ、pgrep -l python3 で名前も見てから、pkill python3 でまとめて止めてください。止めたあと pgrep python3 が空になる(=全部止まった)ことを確認しましょう。-f を使うと pkill -f train.py のようにコマンドラインの一部でも狙えます。
演習
python3 という名前のプロセスを、名前を指定してまとめて終了させてください。
ヒント1を見る
名前でまとめて止めるのは pkill 名前 です。
ヒント2を見る
pkill python3