我似乎有多个正在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
或 ,但输出中的参数应该为您提供正在运行的确切脚本。perl
top
args
ps