• ベストアンサー

シェルスクリプトについて

理工系の学生です。 似たような実験プログラムを大量に投げたいので シェルスクリプトを使おうと思っています。 マシンは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が完全に占拠されてしまいそうなので不安です。 よろしくお願いいたします。

  • R-gray
  • お礼率41% (1005/2413)

質問者が選んだベストアンサー

  • ベストアンサー
  • tormmy77
  • ベストアンサー率44% (4/9)
回答No.1

./zikken $a の前後にデバッグ用の出力を設ければ分かるのではないでしょうか? echo "start"[$a] ./zikken $a echo "end"[$a] 自力で調べてみましょう! それでも分からなければまたお答えします。

R-gray
質問者

お礼

自分で確かめてみました! 逐次的に進むんですね! ありがとうございました!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

前のジョブが終わらない限り次のジョブに進まない可能性が 高いですが、必ずしもそうだとは言えません。 psコマンドで確認すれば、稼働状況がわかるでしょう。 ただ1個1時間の処理を1000回って結局40日フル稼働?? CPU使用状況にもよりますが、ある程度並行で動かすことも 視野に入れた方がよいような気がしますが・・・

R-gray
質問者

お礼

あ、いえ、1000回というのはたとえです、とはいえ トータル3日ほどはかかると思いますが。。。 試してみたら確認できました。ありがとうございました!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

少数の例で実験すればわかるけど逐次実行されます. つまり, 「最初に実行した ./zikken が終了してから次の ./zikken が実行される」という手順になります. ただし, そのプログラム自身でバックグラウンドに回ったりするとプロセスがたまります.

R-gray
質問者

お礼

おっしゃるとおり./zikken 0 &などとやると 一気にすべてのジョブが投げられてしまいました。 ありがとうございました!

関連するQ&A

  • linuxのシェルスクリプト

    linuxのシェルスクリプト シェルスクリプトの質問をどこですればよいのかよくわからないので、ここでさせていただきます。 最近、始めてシェルスクリプトの勉強を始めました。 スクリプトに渡す引数を出力したいと思い、 echo $1 echo $2 echo $3 とかくと、スクリプトに渡した引数が出力されます。 これを、for文で書くと for i in 1 2 3 do echo $i done とねるのですが、これでは1,2,3が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。

  • シェルスクリプトでお聞きしたいのですが

    たとえばシェルスクリプト内であるジョブを実行して、 それが一時間以内に終了しなければそのジョブを削除する ということはできるのでしょうか? アドバイスいただけると幸いです 宜しくお願いいたします

  • シェルスクリプトの問題が分かりません。

    引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトを作成する。具体的には $ ./sum.sh 1 2 3 4 5 15 のようになるシェルスクリプトである(引数の個数は可変とする)。 どうしてもわかりません。どうか、よろしくお願いします。

  • Linuxのシェルスクリプトについて

    最近Linuxの使い方を勉強し始めたのですが シェルスクリプトについてわからないところがあるので教えてください。 カレンダーを出力するスクリプト #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done というcal.shという名前のスクリプトを作りました。 ./cal.sh x y z (x,yは年数、zは何年飛ばしで表示するかを指定する引数です) と実行すると問題なくカレンダーが表示されるのですが x,y,zの値に不適切な入力値がある場合や、引数の数が2つより少ない場合 使い方を示すメッセージを出力してプログラムを終了するようにしたいです どうすればいいのかわかりません。 本当に困っています。 親切な方のご回答をお待ちしています。

  • シェルスクリプト 引数の引渡しについて

    こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。

  • シェルスクリプトをローカルで動作させるには

    cronジョブが使えるレンタルサーバーを使用しており、cronジョブから起動するshスクリプトを作ろうと思っています。 そこでシェルスクリプトを簡単に書こうと思っているのですが、プログラムはphpしかわかりません。勉強するためにはローカルで実行できる環境が必要だと思っています。 ネットでよく調べてみたのですが、シェルスクリプトをローカルで動作させる方法がわかりません。コマンドプロンプトから実行できたりしないんでしょうか?

  • シェルスクリプトの質問です

    シェルスクリプトの質問です 質問が連続してしまい、もうしわけございません。 1番目から13番目までの引数を表示させようと思い for i in `1 13` do eval echo '$'$i done をかいたのですが、10番目からは不正確になってしまいます。どうしてでしょうか? どなたかご教授お願いいたします。

  • シェルスクリプト間で排他をとりたい

    環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

  • シェルスクリプトで困っています 2

    度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。

  • コマンドの結果を変数へ代入@シェルスクリプト

    Linux初心者です。 標記のとおり、シェルスクリプトで、コマンドの結果を変数へ代入することはできるでしょうか? 目的は、あるプログラムの開始時間から終了時間までの経過時間を計算して表示することです。時間を変数に代入しておいて計算したいのですが、方法がわかりません。(入出力のリダイレクト(|や>)、コマンドを引数に渡す方法(``)はわかったのですが...) よろしくお願いいたします。