我有 9 个不同的 bash 进程一直在运行(有时我会得到更多,例如,我现在有 37 个 bash 进程。)。我发现这个问题,其中 OP 也有类似的问题。但我不认为这是重复的(因为这询问如何调试,我的问题直接是为什么)我运行了这个lsof | grep 'bash.*cwd'
并看到它们都在~
除了/private/tmp
.
答案说我应该使用pstree
,但我没有,然后它说我应该使用ps aux -H
,但是,我有 BSD ps
,其中 -H 是“非法操作”。所以我安装pstree
并运行pstree
,这是我的输出
-+= 00001 root /sbin/launchd
|-+= 67440 root login -pf avnamn
| | \--= 96033 avnamn -bash
| | \--= 99021 avnamn -bash
| \-+= 99355 avnamn -bash
| \--- 99491 avnamn grep bash
| \-+- 67441 avnamn -bash
| \--- 69408 avnamn -bash
| \-+- 08457 avnamn -bash
| \--- 08513 avnamn -bash
| \-+- 19936 avnamn -bash
| \--- 20053 avnamn -bash
|-+= 90217 root login -pfl avnamn /bin/bash -c exec -la bash /bin/bash
| \--- 90218 avnamn -bash
\--- 20873 avnamn -bash
avnamn
是我的用户名。我删除了不属于该分支的东西。这并没有告诉我太多,并且与另一个问题中的OP不同,当我重新启动时,这不会消失。这很烦人,因为它让我的粉丝非常吵闹,我可以杀死这些进程,但它们会在一段时间后回来。
ps aux
输出,使用大量CPU。
avnamn 34737 51,4 0,0 2476312 4832 s000 R+ 1:49am 14:14.28 -bash
top
输出,使用大量CPU。
34737 bash 0.0 15:02.72 1/1 0 17+ 4056K+ 0B 0B 34736 34736 running *0[1+] 0.00000 0.00000 501 1959+ 367+ 182+ 33+ 4456+ 213005750+ 215920747+ 0 0 0.0 avnamn N/A N/A N/A N/A N/A N/A
输出ps -ef | awk ' NR == 1 { header = $0; next } { pid[$2] = $0 } /bash/ { toprint[$2] } END { print header; for (i in toprint) { while (i != 1) { split(pid[i], pieces, " "); i = pieces[3]; toprint[i] } } for (i in toprint) { print pid[i] } }'
:
0 54267 1 0 11:29pm ttys011 0:01.06 login -pf avnnamn
501 61203 61158 0 6:57pm ttys007 0:00.00 -bash
501 52955 52582 0 11:22pm ttys010 0:00.00 -bash
0 54462 1 0 6:22pm ttys003 0:00.02 login -pf avnnamn
0 61157 1 0 6:57pm ttys007 0:00.02 login -pf avnnamn
0 15864 1 0 3:02pm ttys005 0:00.02 login -pf avnnamn
501 8378 8377 0 11:39pm ttys012 3:39.31 -bash
501 9716 1 0 11:47pm ?? 0:00.39 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
0 52581 1 0 11:20pm ttys010 0:01.07 login -pf avnnamn
0 8495 1 0 11:40pm ttys013 0:01.04 login -pf avnnamn
0 71228 1 0 7:46pm ttys009 0:00.02 login -pf avnnamn
501 54268 54267 0 11:29pm ttys011 0:00.03 -bash
501 9751 9720 0 11:47pm ttys015 0:00.02 -bash
0 9720 9716 0 11:47pm ttys015 0:01.15 login -pf avnnamn
501 8496 8495 0 11:40pm ttys013 0:00.02 -bash
501 8515 8496 0 11:40pm ttys013 0:00.00 -bash
501 61158 61157 0 6:57pm ttys007 0:00.04 -bash
501 71229 71228 0 7:46pm ttys009 0:00.08 -bash
0 59136 1 0 6:46pm ttys004 0:00.03 login -pf avnnamn
0 59962 1 0 6:50pm ttys006 0:00.02 login -pf avnnamn
501 52582 52581 0 11:20pm ttys010 0:00.03 -bash
0 3066 1 0 3:04am ttys000 0:00.13 login -pf avnnamn
501 55004 54268 0 11:34pm ttys011 0:00.00 -bash
501 73098 71229 0 7:55pm ttys009 0:00.00 -bash
0 8377 1 0 11:39pm ttys012 0:01.04 login -pf avnnamn
501 71202 71201 0 7:46pm ttys008 4:18.90 -bash
0 28465 1 0 10:52pm ttys001 0:00.01 login -pf avnnamn
0 1 0 0 2:53am ?? 4:12.90 /sbin/launchd
501 3067 3066 0 3:04am ttys000 0:00.05 -bash
501 3152 3067 0 3:05am ttys000 0:00.00 -bash
501 7043 7042 0 3:27am ttys002 0:00.02 -bash
501 7048 7043 0 3:27am ttys002 0:00.00 -bash
501 15865 15864 0 3:02pm ttys005 0:00.03 -bash
501 16395 15865 0 3:05pm ttys005 0:00.00 -bash
501 28466 28465 0 10:52pm ttys001 0:00.04 -bash
501 28853 28466 0 10:55pm ttys001 0:00.00 -bash
501 54463 54462 0 6:22pm ttys003 0:00.05 -bash
501 54901 54463 0 6:24pm ttys003 0:00.00 -bash
501 59137 59136 0 6:46pm ttys004 0:00.04 -bash
501 59142 59137 0 6:46pm ttys004 0:00.00 -bash
501 59963 59962 0 6:50pm ttys006 0:00.09 -bash
501 61156 59963 0 6:57pm ttys006 0:00.00 -bash
答案1
如果 shell 进程正在运行大量消耗 CPU,对我来说,您需要查看它是登录 shell 还是运行 shell 脚本的进程。您似乎有很多登录过程,您通常在不同的ttys上登录9次吗?
pstree 可能有助于找到行为不端的父母。例如,我见过 ppp 守护进程生成“坏”shell,这些 shell 会立即退出并且不断重新启动。
但是,您的 shell 会消耗大量 CPU。这意味着 shell 脚本出了问题。诀窍是弄清楚这些脚本是什么。在 Linux 中的 bash 上,很简单, ls -l /proc//fd/10 很可能会告诉您脚本名称。不知道bsd有没有这个功能。