Linux 管理Shell任务

Linux 管理Shell任务,linux,shell,task,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的两个任务组成。我想要一种方法来保证第二行“后两个任务”在前两个任务成功完成之前不会开始执行。是否有其他方法可以执行此操作?是否尝试在不使用“&”字

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

是否尝试在不使用“&”字符的情况下运行此操作?通常,符号告诉bash在后台运行一个命令,然后继续下一个命令。在没有符号的情况下,任务应该等到完成后再进行下一个任务


Michael G.

您需要等待后台进程的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
。对于这个玩具演示,这是无害的,但如果您最终需要传入带引号的字符串作为参数,则需要更详细的解决方案。

我认为这并不能回答问题。shaklasah需要同时运行两个作业;然后等待他们两个都完成;然后再运行两个作业。因此,
&
是有意的,而且是必要的。确切地说@JasonOrendorff那么你认为应该是什么呢?!这个答案的后半部分不起作用。试着运行它。它发出命令
“prun 0”
“prun 1”
(带引号),这些命令不调用
prun
函数。你可以在
并行
中使用
eval“$1”
eval“$2”
,但必须有更好的方法…“足够的绳子射中你自己的脚”。。。谢谢你的通知;编辑了答案。