Awk

僅當特定數量的 PID 符合條件時才終止程序

  • June 26, 2021

我正在嘗試改進我用作在容器內執行的(被濫用的)docker-compose 健康檢查的一個班輪:

ps -C program.bin -o pid,pcpu --no-headers | awk '$2 > 98 {print $1}' | xargs kill -9

在目前形式中,我過濾 CPU 使用率超過 98% 的 PID,並立即殺死任何匹配的 PID。

但是,我只想在確切數量的結果 PID 具有高使用率時才殺死(換句話說,如果一個 program.bin PID 的 CPU 超過 98%,不要殺死它,但如果其中 2 個符合標準,殺死他們兩個)。有關如何執行此操作的任何指示?謝謝!

... | awk '
$2 >= 98 {c++; m[$1]} 
END { if (c >=2 ) for(i in m) print i }' | xargs -r kill -9

將消耗大量資源的程序儲存在一個數組中,當且僅當多個n程序高於門檻值時列印它們,否則不列印。

如果沒有給出參數,該-r選項指示退出而不執行命令。xargs否則執行kill.

引用自:https://unix.stackexchange.com/questions/655822