バックグラウンドで 2 つのプロセスを起動しています。wait $pid2 $pid3
3.sqlを起動する前に、動作していることを確実に保証し、完了を待つにはどうすればよいですか? 2.sql が完全に完了するまで、3.sql を起動できません。誰かがこれをチェックするための別のテクニックを教えてもらえますか?
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
pid2=$!
pid3=$!
wait $pid2 $pid3
4.sql
バックグラウンドで 2 つのプロセスを起動しています。wait $pid2 $pid3
3.sqlを起動する前に、動作していることを確実に保証し、完了を待つにはどうすればよいですか? 2.sql が完全に完了するまで、3.sql を起動できません。誰かがこれをチェックするための別のテクニックを教えてもらえますか?
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
pid2=$!
pid3=$!
wait $pid2 $pid3
4.sql
これがスクリプト全体である場合は、次のように単純化して単純化できますwait
。
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
wait
4.sql
明示的に待機する場合は、pid を正しく設定する必要があります。バックグラウンドで実行しているが、バックグラウンドで実行する前にその pid を収集しない3.sql
という理由だけで待機しています。あなたが持っている必要があります:2.sql
3.sql
#!/usr/bin/ksh
1.sql
2.sql &
pid2=$!
3.sql &
pid3=$!
wait $pid2 $pid3
4.sql
あなたが現在使用している手法は正当なもののようです。なんらかの理由でオペレーティング システムまたはシェルを信頼できない場合は、スクリプトが完了したら出力を出力し、その出力をキャプチャすることができます。次に例を示します。
rm -f 2.out 3.out
2.sql > 2.out &
3.sql > 3.out &
...
wait $pid2 $pid3
if [ "$(cat 2.out)" != "done" ] || [ "$(cat 3.out)" != "done" ]; then
echo "2.sql and 3.sql didn't really finish - exiting" >&2
exit 1
fi
4.sql
( if
andexit
をwhile
短いに変えることもできます。これにより、そもそもsleep
の必要がなくなります。)wait