使用bash执行多个进程

ins*_*ity 2 linux bash process

我想使用bash并行运行多个进程.我做了以下事情:

./proc sth1 & ./proc sth2 & ./proc sth3 & ... & ./proc sthN &

上述问题是它立即结束.所以,如果我这样做: time (./proc sth1 & ... & ./proc sthN &)我回来了0.

我想运行上面的命令,但我希望它在最后一个进程完成时停止.因此,如果./proc sthX需要10秒,而所有其他进程需要1秒.我想等待10秒,直到上面的命令返回.有没有办法做到这一点?

Pet*_*lák 6

wait最后打电话.引用bash手册作业控制内置:

wait [jobspec or pid ...]

等到每个进程ID pid或作业规范jobspec指定的子进程退出并返回等待的最后一个命令的退出状态.如果给出了作业规范,则等待作业中的所有进程.如果未给出参数,则等待所有当前活动的子进程,并且返回状态为零.如果jobspec和pid都没有指定shell的活动子进程,则返回状态为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."
)
Run Code Online (Sandbox Code Playgroud)