管理Shell任务

时间:2012-08-13 22:56:07

标签: linux shell task

我正在编写以下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的任务。我想要一种方法来保证第二行“后两个任务”在前两个任务成功完成之前不会开始执行。有没有去做?

2 个答案:

答案 0 :(得分: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。对于这个玩具演示,这是无害的,但如果你最终需要传入引用的字符串作为参数,你将需要一个更精细的解决方案。

答案 1 :(得分:0)

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

Michael G。

相关问题