動かざることバグの如し

近づきたいよ 君の理想に

Linuxで特定の古いプロセスを一括killしたい

環境

やりたいこと

普通プロセスは終了したら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できる。(用途がわからんが)

参考リンク