shell脚本控制后台进程数量的问题,大神来看看啊!

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
langyxxl
帖子: 443
注册时间: 2012-01-17 22:17

shell脚本控制后台进程数量的问题,大神来看看啊!

#1

帖子 langyxxl » 2014-10-30 9:32

想要以一定的数量执行一个程序,自己写了一段shell脚本

代码: 全选

threadcount()
{
	threadnum=`jobs |wc -l`
	echo Threadnum:$threadnum
	if [ $threadnum -le 1000 ]
	then
		return
	else
		threadcount
	fi
}

while [[ 1 ]] 
do
	(sleep 1)&
	threadcount
done
这里想要执行1000个sleep后台程序,threadcount函数会控制sleep程序的数量,执行的时候会发现一开始进程数会飙升到400以上,之后会不断下降到300,,再到200,最后都突破100 :em20

造成这种现象的原因是什么,我只知道没能达到1000的原因是程序最快只能到400个,但是为什么数量会慢慢下降?
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: shell脚本控制后台进程数量的问题,大神来看看啊!

#2

帖子 astolia » 2014-10-30 11:08

代码没看出什么问题,实际运行也未能重现此问题。
不过你机器上只能达到400倒是很奇怪,进程的创建开销也未免太大了。我这里在windows上用cygwin跑都能上1000,只是耗时比linux下多几倍而已
头像
langyxxl
帖子: 443
注册时间: 2012-01-17 22:17

Re: shell脚本控制后台进程数量的问题,大神来看看啊!

#3

帖子 langyxxl » 2014-10-30 12:43

那你运行了一段时间后有没有出现下降的情况?或者设置为2000看看,我在同事ubuntu的i5的3.2G cpu上面一开始只能冲到700,之后疯狂下降。。。。

我昨天设了100个同时运行sleep后台进程,一开始能很好的运行在100,今天早上看已经下降到88,今天就设置为1000试了一下,发现下降的非常快

想了一上午的原因,难道是和linux进程调度有关系? :em20 不太了解这方面的东西啊
头像
jiandan23
帖子: 94
注册时间: 2010-12-17 22:31
系统: Mint 19.2

Re: shell脚本控制后台进程数量的问题,大神来看看啊!

#4

帖子 jiandan23 » 2014-10-31 15:08

1s钟之内来不及跑threadcount一千遍。
你可以延长时间试试(比如sleep 1m),或者将echo语句去掉,echo语句很耗时间的
回复