Awk
僅當特定數量的 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 具有高使用率時才殺死(換句話說,如果一個 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
.