マルチスレッドの独立したif
ステートメントをbashスクリプトで使用する正しい方法は何ですか? if
に含まれるコードの後、または式の後に&
を配置するのが最善でしょうか?マルチスレッドBashの場合ステートメント
式の後に&
の場合、if
に大きなコードブロックが含まれている場合は、必要に応じてスレッドを続行することが理にかなっています。しかし、1行のコードも&
で終わるべきですか?式の後
:タスクの後
if [ expression ] &
then
#task
fi
:
if [ expression ]
then
#task &
fi
は、すべての異なる配置と実行の作業を行う方法を、互いに独立したタスクを実行することを3つのif
文を想像してみて&
?私が理解していることから、式の後に置くと、3つの式はすべて(基本的に)同時に開始し、3つのタスクも実行します。タスクコードの後に置かれた場合
#Thread 1 #Thread 2 #Thread 3
if [ expr1 ] & if [ expr2 ] & if [ expr3 ] &
then then then
task1 task2 task3
fi fi fi
wait
、最初if
が評価されるであろうと最初のタスクは、第2 if
が評価されるであろうから始まりとしてのみ。タスクは、同時よりもずらされています。
#Thread 1 #Thread 2 #Thread 3
if [ expr1 ]
then
task1 & if [ expr2 ]
fi then
task2 & if [ expr3 ]
fi then
task3 &
fi
wait
式内部スレッドを実行するために組み合わせることがないできif
など:
if [ combined expression ]
then
#task1 &
#task2 &
#task3 &
fi
私の特定のケースでは、それらは別個のプロセスであることを示します。終了したら子プロセスを終了するだけですか? – Matt
かなり、そうです。 'wait'はすべての子サブプロセスが完了するまでブロックします。したがって、 'wait'の後にさらにステートメントがある場合、これらのステートメントはすべてのサブプロセスが完了するまで実行されません。特定のサブプロセスが終了するのを待つ場合は、 'wait'はpidまたはjob idを取ることもできます。 '&'でバックグラウンドした直後に、組み込みの '$!'変数からサブプロセスのPIDを得ることができます。 –