我想使用bash并行运行多个进程。我做了以下事情:
./proc sth1 & ./proc sth2 & ./proc sth3 & ... & ./proc sthN &
上面的问题是它立即结束。因此,如果这样做:time (./proc sth1 & ... & ./proc sthN &)
我会回来的0
。
我想运行上面的命令,但是我希望它在最后一个过程完成后停止。因此,如果./proc sthX
花费10秒,而所有其他过程花费1秒。我想等待10秒钟,直到上述命令返回。有没有办法做到这一点?
刚打完电话wait
。引用bash手动Job control内置函数:
wait [jobspec or pid ...]
等待直到由每个进程ID pid或作业规范jobspec指定的子进程退出,并返回等待的最后一个命令的退出状态。如果给出了作业说明,则将等待作业中的所有过程。如果未提供任何参数,则将等待所有当前活动的子进程,并且返回状态为零。如果jobspec和pid均未指定外壳的活动子进程,则返回状态为127。
一个例子:
#!/bin/bash
function test {
time=$(( RANDOM % 10 ))
echo "Sleeping for $time"
sleep "$time"
echo "Slept for $time"
}
time (
test & test & test & test & test & test &
wait
echo "Finished all."
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句