現在コンソールアプリケーションでCのプログラムを作成しています。
処理としては
1.最初に起動するメイン処理からCreateProcessで別の処理(.exe)を起動する。
2.1で起動されたプロセスは常駐し_BeginThreadexで様々なスレッドを立ち上げ処理を行う。
3.1のメイン処理はプロセス起動後、処理を終了する。
です。
この場合最初にDOS窓が表示され、3で処理が終了するとDOSのプロンプトが表示された状態になります。
タスクマネージャで見ると1のプロセスはいなくて1で起動されたプロセスのみいますが、ここでDOS窓の右上のクローズボタンを押して閉じると1で起動されたプロセスも死んでしまいます。
本来最初に起動したメインのプロセスが生きていてそれを強制的に終了させた場合そこから起動された他のプロセスは子供とみなされ一緒に死ぬのなら解りますが、この場合最初に起動したプロセスは既に終了しています。
その後残ったDOS窓(実際にはcmd.exe)とメインから起動されたプロセスは親子関係とみなされるのでしょうか?
もしその場合親子関係でなくする事は出来るのでしょうか?
コンソールアプリではありませんが、同様の機能のプログラムを下記のように作成し、使用していますが全く問題はありません(数万回の実績)。このプログラムはスタートアップで起動しています。xxxxx.exe はアイコン状態で動く常駐のWindowsプログラムです。ご参考まで
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
.
.
.
rc = CreateProcess("xxxxx.exe",
NULL, // コマンドラインパラメータ
NULL, // セキュリティ
NULL, // セキュリティ
FALSE, // ハンドル継承フラグ
0, // 作成フラグ
NULL, // 環境ブロックのアドレス
NULL, // カレントディレクトリ
&si, // STARTUPINFO 構造体
&pi); // PROCESS_INFORMATION 構造体
.
.
.
return(0); // 終了
}
ツイート | ![]() |