shell脚本中的wait命令

时间:2013-07-17 02:39:54

标签: bash

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

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

非常感谢。

1 个答案:

答案 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,你通常会留下括号。