0

バックグラウンドで 2 つのプロセスを起動しています。wait $pid2 $pid33.sqlを起動する前に、動作していることを確実に保証し、完了を待つにはどうすればよいですか? 2.sql が完全に完了するまで、3.sql を起動できません。誰かがこれをチェックするための別のテクニックを教えてもらえますか?

#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
pid2=$!
pid3=$!
wait $pid2 $pid3
4.sql
4

2 に答える 2

2

これがスクリプト全体である場合は、次のように単純化して単純化できますwait

#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
wait
4.sql

明示的に待機する場合は、pid を正しく設定する必要があります。バックグラウンドで実行しているが、バックグラウンドで実行する前にその pid を収集しない3.sqlという理由だけで待機しています。あなたが持っている必要があります:2.sql3.sql

#!/usr/bin/ksh
1.sql
2.sql &
pid2=$!
3.sql &
pid3=$!
wait $pid2 $pid3
4.sql
于 2013-08-17T20:13:00.090 に答える
1

あなたが現在使用している手法は正当なもののようです。なんらかの理由でオペレーティング システムまたはシェルを信頼できない場合は、スクリプトが完了したら出力を出力し、その出力をキャプチャすることができます。次に例を示します。

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

( ifandexitwhile短いに変えることもできます。これにより、そもそもsleepの必要がなくなります。)wait

于 2013-08-17T20:11:39.640 に答える