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