C言語関係掲示板

過去ログ

No.444.UNIXで他のプログラムを非同期で起動

[戻る] [ホームページ]
No.3147

非同期でプログラム起動
投稿者---カンパ(2002/10/25 21:10:24)


お初です。
今、他のプログラムを非同期で起動するプログラムを作っています。
WindowsのAPI関数を使えば簡単に出来るのですが、これをUNIXでもできないかと
考えています。
WinodowsのAPIだとWinExec(Program_Name,SW_SHOWNORMAL)や、
ShellExecute(NULL,"open",Program_Name,NULL,NULL,SW_SHOWNORMAL)などがあります
よね。
これと同じ機能を持った標準関数がないか探しているのですが、なかなか見つからな
いんです。
system()だと同期でプログラムを起動してしまうため目的がかなえられません。
だれかご存知の方いらっしゃいましたら教えてください。


No.3157

Re:非同期でプログラム起動
投稿者---かずま(2002/10/26 14:56:55)


> 今、他のプログラムを非同期で起動するプログラムを作っています。
> WindowsのAPI関数を使えば簡単に出来るのですが、これをUNIXでもできないかと
> 考えています。

fork() を使ってプロセスを 2つにし、子プロセス側で exec() や system() で
他のプログラムを起動します。

親プロセス側で、wait() で子プロセスの終了を待てば、同期です。
system() は内部でこうやっています。

wait() で待たなければ、子プロセスも親プロセスも勝手に動いています。

子プロセスの終了を知りたければ、SIGCHILD のシグナルをキャッチするように
設定します。

No.3158

Re:非同期でプログラム起動
投稿者---黒猫(2002/10/26 16:49:40)


>お初です。
>今、他のプログラムを非同期で起動するプログラムを作っています。
>WindowsのAPI関数を使えば簡単に出来るのですが、これをUNIXでもできないかと
>考えています。
>WinodowsのAPIだとWinExec(Program_Name,SW_SHOWNORMAL)や、
>ShellExecute(NULL,"open",Program_Name,NULL,NULL,SW_SHOWNORMAL)などがあります
>よね。
>これと同じ機能を持った標準関数がないか探しているのですが、なかなか見つからな
>いんです。
>system()だと同期でプログラムを起動してしまうため目的がかなえられません。
>だれかご存知の方いらっしゃいましたら教えてください。

黒猫です。久しぶりに投稿します。

以前、私も同じご質問をしました。
私が使用した方法としては、こんな複雑なものではなくて、
「子プロセスをバックグランドで起動する」という方法を
教えて頂きましたので、ご参考までに。