我需要使用/ Cobra在後臺運行各種作業。如何計算BASH中的進程,包括那些剛啓動的進程?
我有32個內核,我想保持幾個免費,否則我的機器太慢,做其他事情。
在這段代碼我檢查的進程數用ps,只啓動到30
最大數量然而,「PS」似乎並沒有給信息及時。即使我等待3秒鐘,ps有時會聲明匹配進程的數量。這大概是他們剛剛開始在後臺開始的時候。
無論如何,從ps(或其他方面)得到更好的答案,我唯一的解決方案是睡更長時間,但這有點笨重。
#!/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
並非所有的操作系統都有'/ proc'文件系統。 – chepner 2014-09-23 12:33:58