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