0

特定の順序で提出したい仕事がいくつかあります。まず、cal1st_1.sh cal1st_2.sh...のような複数のジョブcal1st_10.shが一度に送信され、同時に処理されます。それらがすべて終わった後、私は という仕事をしていpost_process.shます。次に、 cal2nd_1.shcal2nd_2.sh....のような複数のジョブを繰り返しますが、これを 4 回行う必要があります。cal2nd_10.shpost_process.sh

get_final.sh のようなスクリプトを書いてみました

#!/bin/bash
./cal1st_1.sh & ./cal1st_2.sh & ./cal1st_3.sh...... & ./cal1st_10.sh
./post_process.sh
./cal2nd_1.sh & ./cal2nd_2.sh & ./cal2nd_3.sh...... & ./cal2nd_10.sh
./post_process.sh

command: で実行しますがnohup ./get_final.sh &、うまくいかないようpost_process.shです。コードのどの部分が間違っているか教えてもらえますか? 私のコードに関連する質問がある場合は、コメントを残してください。cal1st*shcal1st*sh

編集

こんなスクリプト get_final.sh を書きましたが、うまくいくと思いますか? 私はちょうどそれを実行する必要がありますnohup ./get_final.sh &

#!/bin/bash
pre_cal.sh
for i in `seq 1 13`; do
cal_dis_vel_strain_$i.sh &
done
wait  
echo 1 > record
./post_cal.sh

...
4

1 に答える 1

1

コードのどの部分が間違っているか教えてもらえますか?

前の「cal」プロセスが完了するまで「後処理」タスクが開始されないというあなたの仮定は間違っています。それはうまくいく方法ではありません&&子プロセスが終了するのを待たずに、バックグラウンドで実行されるようにすることです。

あなたがやろうとしていることをする方法は、waitここで説明されているように、組み込みコマンドを使用することです:

この場合、waitバックグラウンド プロセスごとに (任意の順序で) する必要があります。

(問題は とは関係ありませんnohup。)


フォローアップへの対応:

  1. それは正しくありません。wait子プロセスごとに必要です。シングルwaitは1つのプロセスを待つだけです。

  2. その問題を修正したら、そのように呼び出すことができます。ただし、スクリプトが終了する前にセッションが切断される可能性がある場合にのみ、これを行う必要があります。もう 1 つの方法はscreen、セッションを切り離して再接続できるプログラム ... です。

于 2013-09-10T01:28:01.017 に答える