想退出主进程而不等待process2返回

Posted

技术标签:

【中文标题】想退出主进程而不等待process2返回【英文标题】:want to exit from the main process without wait to process2 return 【发布时间】:2013-10-22 07:08:38 【问题描述】:

我在 MFC 中创建了应用程序(如 App1)。从 app1,我从 app1 调用了另一个应用程序 app2。我叫

CString szCmdline = "app2.exe";
BOOL ret= CreateProcess( NULL,
                szCmdline.GetBuffer(szCmdline.GetLength()),    // application name with parameter
                NULL,          // process security attributes
                NULL,          // primary thread security attributes
                TRUE,          // handles are inherited
                0,              //DETACHED_PROCESS, // creation flags
                NULL,          // use parent's environment
                NULL,           // use parent's current directory
                &siStartInfo,  // STARTUPINFO pointer
                &piProcInfo);  // receives PROCESS_INFORMATION
    if(ret)
    
                return;

     else 
    
        return;
    



我希望应用程序 app1 退出而不让 App2 返回;

【问题讨论】:

【参考方案1】:

首先你应该得到父进程ID然后终止父进程如下。

DWORD crtpid= GetCurrentProcessId();//创建进程前获取当前进程id

创建进程后,您可以使用其进程 id(crtpid) 关闭父进程

处理 hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, crtpid);

if (hProc)

    ::TerminateProcess(hProc, 1);
    ::CloseHandle(hProc);
 

【讨论】:

【参考方案2】:

你试过了吗!

ExitProcess(0)

语法:

VOID WINAPI ExitProcess(
  _In_  UINT uExitCode
);

备注:

使用GetExitCodeProcess 函数检索进程的退出值。使用GetExitCodeThread 函数检索线程的退出值。

【讨论】:

【参考方案3】:

如果您想在启动 App2 后终止 App1,您只需在 App1 中调用 PostQuitMessage。这是关闭应用程序的一种更简洁的方式,因为它为应用程序提供了清理的机会。

【讨论】:

以上是关于想退出主进程而不等待process2返回的主要内容,如果未能解决你的问题,请参考以下文章

linux线程的创建、退出、等待、取消、分离

启动进程并等待退出代码而不冻结

重定向进程输出[关闭]

主进程或者主线程是否会等待子线程或子进程的问题

主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程

主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程