神秘的 bash 实例使用大量 CPU,我该如何调试?

神秘的 bash 实例使用大量 CPU,我该如何调试?

我似乎有多个正在bash运行的进程占用了我的大部分 CPU。这是以下的输出top -c

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND         
20116 terdon    20   0 35288  14m  292 R 400.0  0.2   0:00.43 /bin/bash       
20106 terdon    20   0 35992  15m  280 R  95.9  0.2   0:00.65 /bin/bash       
20105 terdon    20   0     0    0    0 R  57.6  0.0   0:00.83 [bash]          

这是以下的输出ps aux | grep bash | head -3

terdon  7487 45.3  0.0      0     0 ?        R    19:31   0:01 [bash]
terdon  7488 66.0  0.0      0     0 ?        R    19:31   0:01 [bash]
terdon  7530 23.0  0.2  37984 17408 ?        R    19:31   0:00 /bin/bash

每次运行该命令时 PID 都会发生变化,因此看起来好像有东西在不断重生bash

细节:

  • 有多个[bash]条目。如果我理解正确[process name]意味着该进程是在没有命令行参数的情况下启动的。
  • PID 发生变化,因此某些东西正在产生这些。
  • 我已经注销并重新登录(我在 Cinnamon 工作),但问题仍然存在。

现在,我想如果我重新启动,这种情况就会消失,我的主要问题是我可以用什么来跟踪这些进程?

top -c没有帮助,pgrep bash只是给我不同的 PID 列表,lsof /bin/bash只是列出正在运行的 bash 实例并将pstree它们显示为独立进程。

如果相关的话,我正在运行 Linux Mint Debian,内核 3.2.0-4-amd64,GNU bash,版本 4.2.36(1)-release。


编辑:

我已经重新启动(我不得不),并且正如预期的那样,问题已经消失了。不过,我仍然对如何追踪此类流程的有用建议感兴趣。

答案1

看一下 的输出lsof | grep 'bash.*cwd'。这将告诉您进程的当前工作目录。

如果有pstree,请查看其输出。如果没有,请查看 的输出ps aux -H。这将告诉您哪些进程拥有这些神秘进程。

开始检查配置文件是否有任何可疑之处。以下是您应该检查的不完整列表:

~/.bash*
~/.profile
/etc/profile
/etc/bash*
/etc/cron.*/*

[process name]意味着ps找不到该进程的参数,包括参数 0,该参数包含为创建进程而执行的文件的名称。这意味着lsof /bin/bash不会找到这些进程。

答案2

您还可以查看以下输出:

ps -p <pid> -o pid,user,tty,comm,args

某些 shell 脚本将在 的输出中显示为/bin/bash或 ,但输出中的参数应该为您提供正在运行的确切脚本。perltopargsps

相关内容