- ベストアンサー
特定コマンドを同時実行
UNIXで、同じコマンドを複数同時に実行する方法がわかりません。 実行させたいコマンドは条件によってほんの数秒で終わったり 長い時間がかかるため、ターミナルを複数上げて端から順番に enterしていくという方法では当然間に合いません。 このコマンドを何個同時に実行するよ、そういう方法ってないのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> バックグランド起動しても、連続で指定回数 > だけコマンドを実行するだけで、すべての > コマンドが同時に実行していることには > ならないと思うのですが? まず、「&」付きでコマンドを起動すると、 コマンドの起動処理後、制御は元のシェルに戻る ので、背後ではきちんと「複数起動(稼動)」して います。 でもこれはあなたの言う「同時起動」とは異なるのでしょう。 確かに「複数起動(稼動)」と「同時起動(同時刻に おける複数プロセスの同時起動)」は異なります。 プロセスの「全くの同時起動」は不可能です。 シェルスクリプトから起動するにせよ、プログラム内 からfork()で起動するにせよ、「起動する」と言う アクション自体はCPU内部では時系列的に行われる ため、絶対にコンマ何秒かの誤差は発生します。
その他の回答 (3)
- bagyo
- ベストアンサー率40% (16/40)
こんにちわ。 同時にプロセスを起動したいとのことですが、時分割システムである限り、厳密な意味での同時実行は無理だと思います。もし、ほぼ時間差が無いように実行させるのでしたら、実行させたいプログラム内でシグナルハンドラと、タイマー関係のシグナルを利用して、ある時刻に実行再開するようにすれば、多少はタイムラグが解消できるとは思いますが、これでも誤差が出ると思います。
- akino4
- ベストアンサー率18% (35/185)
あなたが言いたいことがよくわからないのですが。用はバックグラウンド でプログラムが実行できればいいのかな? なら >コマンド & と最期に&をつければすぐにコマンドラインの処理にもどれますから もちろん >コマンド & コマンド & コマンド & コマンド & とやれば4つのプログラムが同時に動きます。 ただ、処理結果の表示は同時にはできないのでリダイレクトするなりして ファイルにほぞんしたほうがいいです。
- CueCue
- ベストアンサー率40% (86/214)
シェル・スクリプトなどでバッチファイルを作り、実行するのがいちばん簡単だと思います。 ピッタリ正確に同時刻に始めたい、ということであればatやcronなどを使って時刻起動してやれば実現できるかと思いますが。
補足
スクリプトの内部では、どのようにして実行させたいコマンドを呼び出せばいいのでしょうか? forループとかで指定回数だけループさせて、ループのなかでコマンドを&付きで バックグランド起動しても、連続で指定回数だけコマンドを実行するだけで、 すべてのコマンドが同時に実行していることにはならないと思うのですが?
補足
バックグラウンド起動ということでなく、同時起動です。 たとえば、hoge.shというスクリプトを10個同時に起動して、 psコマンドで調べたらhoge.shというのが10プロセス存在することが確認できる というようなことを望んでいます。 ご指摘の方法ですと、 #> hoge.sh & hoge.sh & hoge.sh & hoge.sh & hoge.sh & というようなコマンドを実行すると思いますが、 これですと順次コマンドを実行しているだけであって、 最後のhoge.shが実行されるまえに1番目が終わっていることもありますよね? そうでなくで、よーいドンで5個起動できるような方法を探しています。 マルチスレッドなプログラムやcronを利用しろといえばそれまでですが。