質問

C++はWindowsアプリを起動したのにつ長期の子プロセス(現を使っていCreateProcess(...)ではないかと思います。

してほしい子プロセスを自動的に閉じ う場合の主な工程でクラッシュ やが閉じられます。

のための要件はこのニーズにクラッシュの"親"と思いことが必要となる場合がある用API/すぐわかるフルヤ金属の営業システム。その他の"お子様"プロセスの洗浄を行っています。

いるのか?

役に立ちましたか?

解決

Windows APIに対応しと呼ばれるオブジェクトでオリジ"の仕事体の次のコードを"仕事"で構成されるシャットダウンしてくださいプロセスがメインのアプリケーション終了時にその取り扱いに洗浄します。このコードは実行します。:

HANDLE ghJob = CreateJobObject( NULL, NULL); // GLOBAL
if( ghJob == NULL)
{
    ::MessageBox( 0, "Could not create job object", "TEST", MB_OK);
}
else
{
    JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };

    // Configure all child processes associated with the job to terminate when the
    jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
    if( 0 == SetInformationJobObject( ghJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)))
    {
        ::MessageBox( 0, "Could not SetInformationJobObject", "TEST", MB_OK);
    }
}

そしてそれぞれの子プロセスを作成し、次のコードを実行して発売子それぞれの工程に加えjobオブジェクト:

STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;

// Launch child process - example is notepad.exe
if (::CreateProcess( NULL, "notepad.exe", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
    ::MessageBox( 0, "CreateProcess succeeded.", "TEST", MB_OK);
    if(ghJob)
    {
        if(0 == AssignProcessToJobObject( ghJob, processInfo.hProcess))
        {
            ::MessageBox( 0, "Could not AssignProcessToObject", "TEST", MB_OK);
        }
    }

    // Can we free handles now? Not sure about this.
    //CloseHandle(processInfo.hProcess); 
    CloseHandle(processInfo.hThread);
}

VISTAの注意:見 AssignProcessToJobObject常に"アクセスを否定の"ビスタ ごとの出会いアクセスを否定の問題AssignProcessToObject()に関ざいます。

他のヒント

つややhackishいに親プロセスに添付する子デバッガを使用 DebugActiveProcess).時にデバッガが終了してdebuggeeプロセスは終了しました。

より良い解決算書いたの子プロセスをスリム化するとともにいる子プロセスモニタの親会社ならびに出場します。

Windowsの仕事物音のように良い場所です。の名前のオブジェクトにおいても、子ども(継承の取扱い).子どもが必要となる場合がある通知の場合、親会社の金型のいずれかを通して失敗したIPC"心臓の鼓動"やWFMO/WFSOの親プロセス。そこで他の子プロセスがTermianteJobObjectとなり、グループ全体

できるなど、たくさんのウォッチドッグの過程走っています。このシステムの唯一のタスクが現在のプロセススペースにスポットのような場合について説明していただけま.でも再起動の後にアプリケーションクラッシュを異なるオプションのユーザーを収集し、デバッグ情報など。においてそれがシンプルに保つために十分なような第二のウォッチドッグの最初です。

いえいのリストのプロセスを始め、殺して一つ一つが終了しています。私のプレの設定顔は丸の内容、そのC++でもないです。に難しいことだろうと子プロセス停止の場合は申請ンダリングする能力があります。.純る能力を追加する機能の取得のときに呼び出され、独自のレンダリングメカニズム例外が発生します。くなった場合はC++には、同じ力です。

きの封止工程、C++オブジェクトは常にリストとしてグローバルです。のdestructorsで停止します。この作の場合はプログラム終了、通常でクラッシュ、すべてのベットはオフになります。

こちらは荒れたとえば:

class myprocess
{
public:
    myprocess(HANDLE hProcess)
        : _hProcess(hProcess)
    { }

    ~myprocess()
    {
        TerminateProcess(_hProcess, 0);
    }

private:
    HANDLE _hProcess;
};

std::list<myprocess> allprocesses;

そのとき発売、コallprocessess.push_back(hProcess);

このトップのヘッド:

  • ているスレッドの代わりにプロセス?
  • みの対応のメインスレッド/プロセスの子プロセスを取得してお待ちいた。この作品のスレッドは、待機中のスレッドの取扱まで待機するスレッドが終了されます。い場合での作業プロセスは、チェックMSDNを検証します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top