fork(){
i=0
count=0
while (($count<5))
do
fpfunction &
pid=$!
#Ensure the pid is available
if [ -z "$pid" ]; then
echo "IS NULL"
else
Array[$i]=$pid
echo "PID is $pid"
fi
wait [$pid]
i=$((i+1))
count=$(( count+1 ))
done
echo "PID: ${Array[*]}"
}
fpfunction()只回显一个字符串,所以我不在这里写。
我对wait()的理解是等待子进程完成然后返回一个值。
我在我的脚本中放了wait(),因为我想确保所有子进程都已完成。
然而,发生错误
不是pid或有效的工作规范
我的理解错了吗?请让我知道如何解决这个问题。
非常感谢。
答案 0 :(得分:5)
如果进程ID是,例如42,则wait
指令变为:
wait [42]
这不是你想要的 - 方括号是个问题。它应该是:
wait $pid
根据以下成绩单:
pax> date ; sleep 60 &
Wednesday 17 July 10:43:51 WST 2013
[1] 5200
pax> pid=$! ; echo $pid
5200
pax> wait [$pid]
bash: wait: '[5200]': not a pid or valid job spec
pax> wait $pid ; date
[1]+ Done sleep 60
Wednesday 17 July 10:44:51 WST 2013
而且,除了(与答案无关),wait()
更适合C wait()
函数。如果您正在使用{{1}从 shell,你通常会留下括号。