- ベストアンサー
シェルスクリプトについて
理工系の学生です。 似たような実験プログラムを大量に投げたいので シェルスクリプトを使おうと思っています。 マシンはMac Proです。 今は簡単のため zikken という実験プログラムがあったとして、 これは引数をひとつ取ることにいたします。 たとえば ./zikken 2 などとして2を引数にして動きます。 して例えば引数を変えながら1000回の実験をしたいと思い、 a=0 while [ $a -ne 1000 ] do ./zikken $a done などとしようかと思っているのですがここで質問があります。 zikkenプログラムは一回一回が1時間ほどかかるプログラムです。 (計算機実験なので大量の計算をさせます) 上記のシェルスクリプトで投げた場合、 ./zikken 0 ./zikken 1 ..... とジョブが投げられるはずですが、この場合./zikken 1は ./zikken 0が終了してから投げられるのでしょうか? それとも終了を待たず勝手にボンボンジョブがたまっていくのでしょうか? もし後者の場合だとCPUが完全に占拠されてしまいそうなので不安です。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
./zikken $a の前後にデバッグ用の出力を設ければ分かるのではないでしょうか? echo "start"[$a] ./zikken $a echo "end"[$a] 自力で調べてみましょう! それでも分からなければまたお答えします。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
前のジョブが終わらない限り次のジョブに進まない可能性が 高いですが、必ずしもそうだとは言えません。 psコマンドで確認すれば、稼働状況がわかるでしょう。 ただ1個1時間の処理を1000回って結局40日フル稼働?? CPU使用状況にもよりますが、ある程度並行で動かすことも 視野に入れた方がよいような気がしますが・・・
お礼
あ、いえ、1000回というのはたとえです、とはいえ トータル3日ほどはかかると思いますが。。。 試してみたら確認できました。ありがとうございました!
- Tacosan
- ベストアンサー率23% (3656/15482)
少数の例で実験すればわかるけど逐次実行されます. つまり, 「最初に実行した ./zikken が終了してから次の ./zikken が実行される」という手順になります. ただし, そのプログラム自身でバックグラウンドに回ったりするとプロセスがたまります.
お礼
おっしゃるとおり./zikken 0 &などとやると 一気にすべてのジョブが投げられてしまいました。 ありがとうございました!
お礼
自分で確かめてみました! 逐次的に進むんですね! ありがとうございました!