特定の数のPIDが基準を満たしている場合にのみプロセスを終了します。

特定の数のPIDが基準を満たしている場合にのみプロセスを終了します。

コンテナ内で実行される(乱用された)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

関連情報