按名稱殺死無回應的進程,但保留回應的進程

按名稱殺死無回應的進程,但保留回應的進程

由於某種原因,我最終得到了相當多的 Google Chrome Helper 進程,這些進程停止回應,佔用 CPU 資源。通常我只是運行killall Google\ Chrome\ Helper,但這會殺死所有進程,包括回應進程,這意味著我必須重新啟動 Chrome。

是否有一個標誌,killall因此它只影響無回應的進程?

答案1

一種方法是使用 來top尋找使用最多 CPU 的進程的 pid。我在一個終端機中啟動了 bash CPU hog:

bash -c "while true; do :; done"

然後在另一個終端中我可以如下殺死它:

kill $( top -l2 | grep bash | sort -nrk3 | awk '{print $1;exit}' )

請注意,因為這是,這是BSD版本top而不是GNU版本。

  • -l2告訴 top 運行 2 次迭代 - 第一個迭代需要被忽略,因為它只報告所有進程的 0% CPU。
  • 只過濾grepbash 行。請注意,如果您的 grep 表達式與輸出的任何其他部分匹配,這可能需要更多工作top
  • sort按第三列 (CPU %) 對輸出進行反向數字排序
  • head取得第一行(CPU 最高)
  • cut取得第一列(PID)
  • 上面是在$()指令替換中執行的,數字PID只是直接傳遞給kill

在 GNU/Linux 機器上等價的是:

kill $(top -bn1 | grep bash | sort -nrk9 | awk '{print $1;exit}')

相關內容