Linux 管理Shell任务
我正在编写以下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的两个任务组成。我想要一种方法来保证第二行“后两个任务”在前两个任务成功完成之前不会开始执行。是否有其他方法可以执行此操作?是否尝试在不使用“&”字
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”
,但必须有更好的方法…“足够的绳子射中你自己的脚”。。。谢谢你的通知;编辑了答案。