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

ter*_*don 5 bash process-management

我似乎有多个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]          
Run Code Online (Sandbox Code Playgroud)

这是输出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
Run Code Online (Sandbox Code Playgroud)

每次我运行命令时,PID 都会改变,所以看起来有些东西在不断地重新生成bash

细节:

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

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

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

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


编辑:

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

小智 6

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

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

开始查看配置文件以查找任何可疑内容。这是您应该检查的不完整列表:

~/.bash*
~/.profile
/etc/profile
/etc/bash*
/etc/cron.*/*
Run Code Online (Sandbox Code Playgroud)

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