コンテナ内で実行される(乱用された)docker-composeヘルスチェックに使用しているこのライナーを改善したいと思います。
ps -C program.bin -o pid,pcpu --no-headers | awk '$2 > 98 {print $1}' | xargs kill -9
現在の形式では、CPU使用率が98%を超えるPIDをフィルタリングし、一致するPIDをすぐに削除します。
ただし、生成されたPIDの正確な数が利用率が高い場合にのみ終了したいと思います。つまり、1つのprogram.bin PIDが98%以上のCPU使用率を持つ場合は終了せず、そのうちの2つが条件を満たしている場合にのみ終了したいと思います。 )、両方を殺す)。これを行う方法についてのアドバイスはありますか?ありがとうございます!
答え1
... | awk '
$2 >= 98 {c++; m[$1]}
END { if (c >=2 ) for(i in m) print i }' | xargs -r kill -9
リソースを消費するプロセスを配列に保存し、n
複数のプロセスがしきい値を超える場合にのみ印刷し、そうでないと何も印刷しません。
引数が指定されていない場合、この-r
オプションはxargs
コマンドを実行せずに終了するように指示します。それ以外の場合は実行してくださいkill
。