首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bash脚本中,'cmd1 [newline] cmd2‘和'cmd1 & cmd2’一样并发吗?

在Bash脚本中,'cmd1 [newline] cmd2‘和'cmd1 & cmd2’一样并发吗?
EN

Unix & Linux用户
提问于 2022-02-28 05:36:37
回答 1查看 122关注 0票数 1

是否使用以下脚本

代码语言:javascript
复制
#!/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

做的和

代码语言:javascript
复制
#!/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

根据我的经验,第一个脚本创建nalog文件的时间比第二个脚本(超过10分钟)要快(在几秒钟内),这对我来说意味着后者等待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中实现这一点?

&而不是&&。我知道&&做什么,也不想在这里应用它。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-02-28 06:16:44

不,cmd1 [newline] cmd2不像cmd1 & cmd2那样并发--前者在启动cmd2之前等待cmd1完成。

如果希望在第一个命令运行时继续执行,则在将其拆分为两行时需要保留&

代码语言:javascript
复制
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

变成了

代码语言:javascript
复制
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post &
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

如果希望在再次循环之前确保这两个命令都完成,则可以使用wait

其他shell构造也提供了并发性,特别是管道:a | b (或它在某些shell中的变体,a |& b,用于重定向两个输出流)同时运行ab,并在继续之前等待两者完成。一些shell还支持协同进程(参见如何在各种外壳中使用coproc命令?)和进程替换(参见如何在各种外壳中使用coproc命令?),它们可以用于并发运行命令。

有关列表终止符(包括&)和管道操作符的详细信息,请参见D15

除非在ksh中,它作为一个共同进程运行a

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/692358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档