
這是為 bash 編寫的腳本:
#!/bin/bash
sleep 1 &
sleep 2 &
sleep 3 &
for t in {10..0}
do
# jobs
echo "Waiting("$t")..."
JCNT=`jobs | wc -l`
echo "JCNT="$JCNT
if [ $JCNT -eq 0 ]; then
break
fi
sleep 1
done
exit 0
它可以工作 10 秒,但不能像預期的那樣工作 3 秒。但如果取消註釋“jobs”命令,那麼它就可以正常工作。我不知道為什麼。你能幫助我嗎?
帶有“jobs”註釋的腳本輸出:
Waiting(10)...
JCNT=3
Waiting(9)...
JCNT=2
Waiting(8)...
JCNT=1
Waiting(7)...
JCNT=1
Waiting(6)...
JCNT=1
Waiting(5)...
JCNT=1
Waiting(4)...
JCNT=1
Waiting(3)...
JCNT=1
Waiting(2)...
JCNT=1
Waiting(1)...
JCNT=1
Waiting(0)...
JCNT=1
並使用未註釋的“jobs”命令:
[1] Running sleep 1 &
[2]- Running sleep 2 &
[3]+ Running sleep 3 &
Waiting(10)...
JCNT=3
[1] Done sleep 1
[2]- Running sleep 2 &
[3]+ Running sleep 3 &
Waiting(9)...
JCNT=2
[2]- Done sleep 2
[3]+ Running sleep 3 &
Waiting(8)...
JCNT=1
[3]+ Done sleep 3
Waiting(7)...
JCNT=0
添加
我這樣修改腳本:
#!/bin/bash
sleep 1 &
sleep 2 &
sleep 3 &
for t in {10..0}
do
KKK=`jobs`
echo $KKK
echo "Waiting("$t")..."
JCNT=`jobs | wc -l`
echo "JCNT="$JCNT
if [ $JCNT -eq 0 ]; then
break
fi
sleep 1
done
exit 0
……並發現有有關已完成的最後一項工作的資訊:
[3] Done sleep 3
呼叫「jobs」只會清除已完成的作業清單。執行「jobs|wc -l」是計算活動作業的錯誤方法。正確的方法是「jobs -r|wc -l」。
答案1
它沒有回答你的問題,就像提示一樣:
當您在循環中單獨執行作業時。它按預期工作/計數。
但現在還沒有膠水,為什麼。