1

我正在编写以下 shell 脚本:

perf stat taskset -c 0 runspec  & perf stat taskset -c 1 runspec 

perf stat taskset -c 0 runspec  & perf stat taskset -c 1 runspec 

如图所示,每一行由提交给两个不同 cpu 的两个任务组成。我想要一种方法来保证第二行“后两个任务”在前两个任务成功完成之前不会开始执行。有办法吗?

4

2 回答 2

3

您需要wait为后台进程的PID。

perf stat taskset -c 0 runspec &
pid=$!
perf stat taskset -c 1 runspec 
wait $pid

perf stat taskset -c 0 runspec &
pid=$!
perf stat taskset -c 1 runspec
wait $pid

显然,通过一些额外的重构会更优雅。或许是这样的:

parallel () {
    local pid
    # Danger: unquoted interpolation
    $1 &
    pid=$!
    # Danger: unquoted interpolation
    $2
    wait $pid
}

prun () {
    perf stat taskset -c $1 runspec
}

parallel "prun 0" "prun 1"
parallel "prun 0" "prun 1"

请注意,该parallel函数插入$1$2没有双引号。对于这个玩具演示,这是无害的,但如果您最终需要传入带引号的字符串作为参数,您将需要一个更精细的解决方案。

于 2012-08-14T04:23:19.563 回答
0

您是否尝试在没有“&”字符的情况下运行它?通常,与号告诉 bash 在后台运行命令并继续执行下一个命令。如果没有与号,任务应该等到完成才能继续进行下一个。

迈克尔·G。

于 2012-08-13T23:03:54.593 回答