为什么我有 9 个 bash 进程,为什么其中一个进程占用如此多的 CPU,我该如何停止它们?

为什么我有 9 个 bash 进程,为什么其中一个进程占用如此多的 CPU,我该如何停止它们?

我有 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有没有这个功能。

相关内容