【发布时间】:2014-11-17 15:36:21
【问题描述】:
我需要使用 /Cobra 在后台运行各种作业。
我有 32 个内核,我想让几个内核保持空闲,否则我的机器会变得太慢而无法执行其他操作。
在这段代码中,我使用 ps 检查进程的数量,并且最多只能启动 30 个。
但是,“ps”似乎无法及时提供信息。即使我等待 3 秒,ps 有时也会在声明匹配进程的数量下。这大概是他们刚刚在后台开始的时候。
有没有办法从 ps (或 otehrwise)那里得到更好的答案,我唯一的解决办法就是睡更长时间,但这有点笨拙。
#!/bin/sh
#set -x
while true
do
NUMRUNNING=`ps | egrep FormsApplic | wc -l`
JOBS=`cat jobs.lst | wc -l`
if [ $JOBS -gt 0 ]
then
MAXSTART=$((30-$NUMRUNNING))
NUMTOSTART=$JOBS
if [ $NUMTOSTART -gt $MAXSTART ]
then
NUMTOSTART=$MAXSTART
fi
for ((i=1;i<=$NUMTOSTART;i++))
do
JOB=`head -n1 jobs.lst`
echo $JOB >> /tmp/jobsStarted
sed -i 1d jobs.lst
/cobra $JOB &
done
fi
LASTNUMRUNNING=$NUMRUNNING
sleep 3
done
【问题讨论】: