• ベストアンサー

あるプログラム実行中に別のプログラムを起動したい

とあるC言語で出来たa.outというプログラム実行中に、b.outというプログラムを実行するプログラム「c.c」を作成したいのですが、どのようにプログラミングすればよいでしょうか? a.outは無限ループするような十分に実行時間の長いプログラムです。 ちなみに、c.cはシェルスクリプト「c.sh」でも構いません。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

fork()してexec()する。 またはsystem()で&つきでb.outを起動。 詳しくは下記URLを参照。 http://www.ncad.co.jp/~komata/c-kouza3.htm

hide76318
質問者

お礼

これでいけそうです。 ありがとうございました。

その他の回答 (2)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

#! /bin/sh ./a.out & ./b.out

hide76318
質問者

お礼

あ、間違えました。 ./a.outの&はバックグラウンドという意味でしたね。 失礼しました。 これでいけそうです^^

hide76318
質問者

補足

これだと、a.out終了してからじゃないと起動出来なくないですか?

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

exec???()関数群を使う

hide76318
質問者

お礼

ありがとうございます。

関連するQ&A

  • シェルスクリプトの実行

    一台目のLINUX上でプログラムを実行しLANでつながれたもう1台のLINUXにあるシェルスクリプトを実行するにはC言語でどのようにプログラミングをすれば可能でしょうか? プログラムと同じ場所ならsystem(コマンド)で出来るんですよね? telnetとか使いますか?それとももっと単純に出来るのでしょうか?

  • 別サーバの実行ユーザの変更

    またシェルスクリプト初心者でっす 調べてみたものの今一つ見つけきれませんでした ボーンでの質問です サーバA上のシェルスクリプト(a.sh)からSSHでサーバBへログインし、 サーバB上のシェルスクリプト(b.sh)を実行させようと思い a.sh内に下記の記述を施しました ssh [ユーザ名]@[サーバ名] "su - ; sh [フルパス]b.sh" この記述を施したa.shをサーバA上で実行したところ standard in must be a tty と端末がないと表示され、実行ユーザが変更されませんでした いろいろ調べてsudoでやるといいという話があったので a.sh内のsuをsudo(-s)に変更して試したところ、 今度はパスワードを聞かれたのですが、パスワード入力がマスクされず、 パスワードを入力すると応答が返ってこなくなりました 質問としてはサーバBの実行ユーザを変更するにはどうすればよいか となります よろしくお願いいたします ※b.sh自体はshコマンドで実行はされます ただ、内部でプロセスをkillしようとするのですが、 そのプロセスのユーザかあるいはrootにならなければ killの権限がないのでkillできない状態となってしまい、 やりたいことが実現できない状態です

  • MinGW,msysでCスクリプトの実行

    windows上でCシェルスクリプトで書かれたファイルを実行する必要が生じました。 これまではcygwin上で難なくやっていたのですが、cygwinは大きいので、これをやめてMinGWにしたため、Cシェルスクリプトが流れなくて困っています。MinGW、msysにはCシェルは無いようです。そこで、MinGW,msys,minttyの環境下で以下のようにやってみたのですが、これでよいのでしょうか? (1)MinGW,msys,minttyをインストール(Bシェルの環境ができる) (2)tcsh.exeをwebからダウンロード(ftp://ftp.funet.fi/pub/unix/shells/tcsh/) (3)tcsh.exeをmsysの/binに入れて、cshにハードリンクを張る(#ln tcsh.exe csh) これで簡単なCシェルスクリプトは流れるようですが、そのCシェルスクリプトの中で、さらにスクリプトファイルを実行させるようなスクリプトはうまく流れません。結局、試行錯誤の結果、以下のように、csh,shを頭に付加してようやく流れるようになりました。 ・元のファイル(script-a,bは流れない) #!/bin/csh -f ........... ./script-a(Cシェル) ./script-b(Bシェル) ........... ・修正後(ようやく流れた) #!/bin/csh -f ........... csh ./script-a(Cシェル) sh ./script-b(Bシェル) ........... 何故このようにしなければいけないのか?また、minttyでCシェルスクリプトを流す方法はこれでよいのか?(他に方法はないのか?)ご教示頂ければと思います。 当方、シェルスクリプトは全く素人で質問自体が的外れかもしれませんがよろしくお願いします。

  • 同時実行数を指定&仕事は共有したい

    同時実行数を指定&仕事は共有したい 処理したいスクリプトが複数あります。 ・job_a.sh ・job_b.sh ・job_c.sh ・job_d.sh ・job_e.sh これらのスクリプトは同じリソースを利用するため、同時実行数は2つに制限したいです。 そこで下記のコマンド実行を思いつきました。コマンドの処理時間は事前にはわからないため、下記では偏りが発生し、実行を開始していないスクリプトが残っていても、1つの実行主体が終えてしまう場合があります。 > job_a.sh && job_b.sh && job_c.sh & > job_d.sh && job_e.sh & ココを、実行主体は終えずに残りのスクリプトを開始する方法はないでしょうか。 コマンドや、簡単なシェルスクリプトで実現できれば最高です。 こんな要望は、プログラムを作成しプロセスやスレッドを使って実現するべきでしょうか。 私はUbuntuを使っています。 ご助言をお願いします。

  • シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。

    シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

  • forkとexec

    あるプログラムから別のプログラムを起動したい、という質問の続きです。 a.out(無限ループ) b.out という二つのプログラムがあり、a.outのループ中に別プログラムc.cからb.outを起動したいのですが、どのようにプログラムを書けばいいでしょうか? 教えてください。

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

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

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • bシェルで実行シェルIDの取得について

    bシェルとして作成されているシェルを仮にa.shとします。 echoで、”a.sh 実行開始”のようなメッセージを表示させたいのですが、 シェルID(a.sh)を取得する事は可能でしょうか?

  • visual C++ 2008での無限ループの対応

    最近C言語でのプログラミングを始めたのですが、visual C++ 2008で実行をしたときプログラムが無限ループになっていた場合どすれば元にもどるのでしょうか?ご存知の方がおられましたら対処方法を教えてください。お願い致します。

専門家に質問してみよう