環境
やりたいこと
普通プロセスは終了したらexit(0)なりなんなりでなくなるが、なにか予期しないことが発生すると残り続けてしまう。
それによってメモリを食い潰してしまってサーバーがダウンしてしまう、、なんてこともありうる。
そこで特定のプロセスを一括でkillしたい。が、プロセスがバッチのように複数走っている場合、通常動いているプロセスもkillさせたくない。
一定時間経過した、およそ不要と判断できるプロセスのみ安全にキルしたい。
例えば pkillコマンドでは プロセス名に部分一致するプロセスをkillできるが、それだと今動いていてほしいのもkillしてしまう。
pkill -9 -f MYPROCESS
pgrepも同様
pgrep MYPROCESS | xargs kill
コマンド
実はkillallコマンドには時間指定ができる。早速使う
ほぼ標準で入っているが、万が一コマンドがなければインストールする。
# Ubuntu apt install psmisc # CentOS yum install psmisc
で、コマンド、以下は10分以上経ったコマンドのみ削除したい場合
killall --older-than 10m MYPROCESS
以下は3日以上経ったコマンドを削除
killall --older-than 3d MYPROCESS
ポイントは --older-than
オプションで、これによって古いプロセスのみに絞れる。渡せる単位は以下
コマンド
記号 | 時間単位 |
---|---|
s | 秒 |
m | 分 |
h | 時 |
d | 日 |
w | 週 |
M | 月 |
y | 年 |
--regexp
オプションを使うと正規表現でプロセス名を検索できる他、--younger-than
で逆に指定期間より新しいプロセスにkillできる。(用途がわからんが)