C言語関係掲示板

過去ログ

No.555.プロセス起動と終了について

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

プロセス起動と終了について
投稿者---じろう(2003/02/05 15:46:59)


フリーのBorland C++Compiler5.5を使用してコンソールアプリを
Cで作成(勉強中)してます。
#include <stdio.h>
#include <process.h>

int main( int argc, char *argv[] )
{
if (argc == 2) {
execlp(argv[1],argv[1],NULL);
}
else if (argc == 3) {
execlp(argv[1],argv[1],argv[2],NULL);
}
else if (argc == 4) {
execlp(argv[1],argv[1],argv[2],argv[3],NULL);
}
else if (argc == 5) {
execlp(argv[1],argv[1],argv[2],argv[3],argv[4],NULL);
}
return 0;
}
と言うよなAP(xxx.exeやxxx.batなど)を起動するプログラムを
書いたのですが起動させたプロセスを終了させることができませんでした。
いろいろ調べた結果、APを起動させ終了させるCreateProcess関
数をWeb上で見つけたのですが使い方がわかりませんでした。
どなたかご教授いただけないでしょうか。

又CreateProcess関数を使用したサンプルを拝見するとwindowsアプリ
と言うのになっていて私の環境ではコンパイルできませんでした。
WindowsAPI(CreateProcess)はフリーのコンパイラでは使えないの
でしょうか?

宜しくお願いします。



No.5098

Re:プロセス起動と終了について
投稿者---カンナ(2003/02/08 23:32:44)
http://hana.sakura.ne.jp/~elfin/k/


 exec系の関数は成功すると呼出元のプログラムは終了してしまい
ますので、起動したアプリケーションを呼出元のプログラムから
終了させることはできません。

 たいていのWin32 APIは<windows.h>をインクルードすれば使用
できます。
 CreateProcessは成功したあとも呼出元のプログラムの処理が続き
ますので終了を試みることは可能です。ただしプロセスを終了させる
安全で汎用的な手段はありません。ウィンドウズアプリケーションな
らメインのウィンドウにWM_CLOSEメッセージをPostMessageするのが
常套手段ですが、任意のアプリケーションのメインウィンドウを取得
する汎用的な手段はありません。もちろんコンソールアプリケーション
に対しても使用できません。TerminateProcessは「プロセスを終了さ
せる」という面では汎用的ですが、DLLがロードしっぱなしになったり
リソースリークが起こったりなど安全とはいえません。
 起動したアプリケーションに合わせた終了手段をとる必要があります。

No.5099

Re:プロセス起動と終了について
投稿者---とおりすがるぜ(2003/02/08 23:36:09)


とりあえずカンナさんがすでに言いたいことを書いているので一つだけ。

>又CreateProcess関数を使用したサンプルを拝見するとwindowsアプリ
>と言うのになっていて私の環境ではコンパイルできませんでした。
>WindowsAPI(CreateProcess)はフリーのコンパイラでは使えないの
>でしょうか?

コンパイル時に-tWオプションは付けましたか?