UNIXで、同じコマンドを複数同時に実行する方法がわかりません。
実行させたいコマンドは条件によってほんの数秒で終わったり
長い時間がかかるため、ターミナルを複数上げて端から順番に
enterしていくという方法では当然間に合いません。

このコマンドを何個同時に実行するよ、そういう方法ってないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

> バックグランド起動しても、連続で指定回数


> だけコマンドを実行するだけで、すべての
> コマンドが同時に実行していることには
> ならないと思うのですが?
まず、「&」付きでコマンドを起動すると、
コマンドの起動処理後、制御は元のシェルに戻る
ので、背後ではきちんと「複数起動(稼動)」して
います。
でもこれはあなたの言う「同時起動」とは異なるのでしょう。

確かに「複数起動(稼動)」と「同時起動(同時刻に
おける複数プロセスの同時起動)」は異なります。

プロセスの「全くの同時起動」は不可能です。
シェルスクリプトから起動するにせよ、プログラム内
からfork()で起動するにせよ、「起動する」と言う
アクション自体はCPU内部では時系列的に行われる
ため、絶対にコンマ何秒かの誤差は発生します。
    • good
    • 0

こんにちわ。


同時にプロセスを起動したいとのことですが、時分割システムである限り、厳密な意味での同時実行は無理だと思います。もし、ほぼ時間差が無いように実行させるのでしたら、実行させたいプログラム内でシグナルハンドラと、タイマー関係のシグナルを利用して、ある時刻に実行再開するようにすれば、多少はタイムラグが解消できるとは思いますが、これでも誤差が出ると思います。
    • good
    • 1

あなたが言いたいことがよくわからないのですが。

用はバックグラウンド
でプログラムが実行できればいいのかな?
なら
>コマンド &
と最期に&をつければすぐにコマンドラインの処理にもどれますから
もちろん
>コマンド & コマンド & コマンド & コマンド &
とやれば4つのプログラムが同時に動きます。
ただ、処理結果の表示は同時にはできないのでリダイレクトするなりして
ファイルにほぞんしたほうがいいです。

この回答への補足

バックグラウンド起動ということでなく、同時起動です。
たとえば、hoge.shというスクリプトを10個同時に起動して、
psコマンドで調べたらhoge.shというのが10プロセス存在することが確認できる
というようなことを望んでいます。

ご指摘の方法ですと、
#> hoge.sh & hoge.sh & hoge.sh & hoge.sh & hoge.sh &
というようなコマンドを実行すると思いますが、
これですと順次コマンドを実行しているだけであって、
最後のhoge.shが実行されるまえに1番目が終わっていることもありますよね?

そうでなくで、よーいドンで5個起動できるような方法を探しています。
マルチスレッドなプログラムやcronを利用しろといえばそれまでですが。

補足日時:2001/05/30 17:19
    • good
    • 0

シェル・スクリプトなどでバッチファイルを作り、実行するのがいちばん簡単だと思います。


 ピッタリ正確に同時刻に始めたい、ということであればatやcronなどを使って時刻起動してやれば実現できるかと思いますが。

この回答への補足

スクリプトの内部では、どのようにして実行させたいコマンドを呼び出せばいいのでしょうか?
forループとかで指定回数だけループさせて、ループのなかでコマンドを&付きで
バックグランド起動しても、連続で指定回数だけコマンドを実行するだけで、
すべてのコマンドが同時に実行していることにはならないと思うのですが?

補足日時:2001/05/30 17:13
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qroot権限の実行コマンドを通常ユーザーで実行

root権限に限らないのですが、他のユーザーの権限でしか実行できないコマンドを自分で実行する方法が知りたいのです。
と言っても、rootや他ユーザーのパスワードを知っているという前提です。

例えば、通常ユーザーで作業をしているときに、root権限で行う必要のあるコマンドを実行したいとします。
今は、suでログインしてから実行していますが、shellスクリプトで実行したいと思っています。

どういったshellスクリプトになりますでしょうか?

Aベストアンサー

> 今回やろうと思ってるのは、suでログインしてから、いくつかの操作を行いたいので

であれば、そのいくつかの操作をまとめてシェルスクリプトにして、
それを su の -c に渡せば良いですね。

例えば、rally というユーザで、シェルスクリプト名が do_rally.sh とします。
スクリプトに実行権限がついていなければ

% su - rally -c "sh do_rally.sh"

という感じ。実行権限がついていれば

% su - rally -c do_rally.sh

で良いです。

ただ、最低一回はパスワードの入力があるので、su を使っている限りは
それからは逃れられません。

# ちょっと遅くなったので、もう sudo を使っているかな?

Qiptableコマンドを複数記載したスクリプトを実行したいです。

Linuxのコマンドについてお聞きしたいです。
iptableコマンドを複数記載したスクリプトを作成し、そのスクリプトを実行することによってパケットフィルタリングの設定をしようと思っています。
Windowsで下記のようなファイルを作成しました。

#!/bin/sh

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -d 210.98.76.54 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth1 -d 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -d 202.228.202.2 -p udp --sport 53 --dport 1024:65535 -j ACCEPT

iptables -A INPUT -j LOG --log-prefix "### INPUT ###"
iptables -A FORWARD -j LOG --log-prefix "### FORWARD ###"


これをLinuxの/rootに作成したbinフォルダにフロッピーでコピーしました。
ファイル名をfilterにしたので、[root@linux root]# filter とし、Enterとし、
スクリプトを実行して設定を反映させようとしました。

しかし、: bad interpreter: そのようなファイルやディレクトリはありません
と出てしまいます。

何が足りないのでしょうか?

Linuxのコマンドについてお聞きしたいです。
iptableコマンドを複数記載したスクリプトを作成し、そのスクリプトを実行することによってパケットフィルタリングの設定をしようと思っています。
Windowsで下記のようなファイルを作成しました。

#!/bin/sh

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -...続きを読む

Aベストアンサー

スクリプトをWindowsで作成したからです.
改行コードに余分な<CR>があり,/bin/sh<CR>という
コマンドは無いので,bad interpreter になります.

dos2unix というコマンドが使えれば,簡単コードを
変換できます.

まあ,今後のためには,Linux上でエディタを使える
ようになることをお勧めします.

Qターミナルに表示された文字をファイルに保存するコマンド

ターミナルにキータイプして入力した文字や、ターミナルに表示される標準出力、標準エラー出力を全て1つのファイルに保存するようなUNIXのコマンドがあったような気がするのですが、なんだったか教えていただけないでしょうか?

Aベストアンサー

script のことかな?
script ファイル名
で、ファイル名に記録開始、exitで記録終了します。

QUNIXのコマンドについて

カレントディレクトリ以外のディレクトリ(/home/ABC)にあるファイル(SORT.exe)を実行する時、pager "less"を併用して画面出力を分割するコマンドを教えてください。

また、そのファイルの標準出力をカレントディレクトリ上のWoutファイルに追加するコマンドを教えてください。

pager less Wout などの意味もあわせて教えてほしいです。
よろしくお願いします。

Aベストアンサー

>less のあとに何か打ち込むことで画面を分割できるのでしょうか?
うーん、UNIX(Linux) の less は画面分割の機能はなかったと思いますけど。
less の機能すべてを使い切っているわけではないので自信はありません。
vi(UNIX 伝統のエディタ)の改良版 vim だったらできたと思います。
screen コマンドというのを使えばどんなコマンドでも分割表示はできます。

参考URL:http://www.dekaino.net/screen/index.html

QscanfのようなUNIXコマンドはあるでしょうか

このカテゴリでよいのかわかりませんが、質問させて頂きます。
OSはHP-UX11.23を使用しています。

スクリプトを実行する際、一旦ストップしたい場所を
指定したいと思います。
その際、scanfのようなUNIXコマンドがあるでしょうか。
ctrl+cなどでは、指定した個所でストップできません。
scanfであれば、キー入力するまでストップできるし、
どのようなキーを入力しても、次の処理に移ることが
可能です。
決まったキーを入力しなければならない場合、間違える
とそのスクリプトは終了してしまうと思うので、
scanfのようなUNIXコマンドを教えて頂ければ
と思います。
よろしくお願いします。

Aベストアンサー

シェルスクリプトでの事でしょうか?

その場合、キーボードの読み込みは
read 変数名
手な感じでにします。


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報