1
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 或有效的工作规范

我的理解错了吗?请让我知道如何解决此问题。

非常感谢。

4

1 回答 1

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()它更适合 Cwait() 函数。如果你waitshell 中使用,你通常会去掉括号。

于 2013-07-17T02:43:20.497 回答