Почему у меня есть 9 процессов bash, почему один из них занимает столько CPU и как их остановить?

У меня есть 9 различных процессов bash, выполняемых в любое время (иногда я получаю больше, например, сейчас у меня есть 37 процессов bash.). Я нашел этот вопрос , где у ОП была аналогичная проблема. Но я не рассматриваю это как дубликат (потому что это спрашивает, как отлаживать, мой вопрос прямо почему) Я запустил этот lsof | grep 'bash.*cwd' 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 output, с той, которая использует много 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/AN/AN/AN/AN/AN/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] } }' 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] } }' 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 

Если в процессе оболочки работает много потребляющего процессора, для меня вам нужно посмотреть, не является ли это оболочкой для входа или чем-то запущенным сценарием оболочки. У вас, похоже, много процессов входа в систему, вы обычно заходите 9 раз на разные ttys?

pstree может помочь найти, скажем, неверного родителя. Например, я видел, как демоны ppp порождают «плохие» оболочки, которые немедленно выходят и продолжают перезапуск снова и снова.

Однако у вас есть оболочка, потребляющая много CPU. Это означает, что скрипт оболочки ошибочен. Трюк разрабатывает эти сценарии. В bash в Linux его простой, ls -l / proc // fd / 10, скорее всего, скажет вам имя скрипта. Я не уверен, имеет ли bsd эту функцию.