按名称杀死无响应的进程,但保留响应的进程

按名称杀死无响应的进程,但保留响应的进程

由于某种原因,我最终得到了相当多的 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}')

相关内容