【问题标题】:Creating independent process!创建独立进程!
【发布时间】:2011-03-03 05:48:26
【问题描述】:

我正在尝试从 C++ 中的服务创建进程。这个新进程正在创建为子进程。我想创建一个独立的进程而不是子进程...

我正在使用 CreateProcess 函数。由于我创建的新进程是一个子进程,当我尝试在服务级别杀死进程树时,它也在杀死子进程......我不希望这种情况发生。我希望创建的新进程独立于服务运行。

请提供相同的建议.. 谢谢..

代码

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);    // Start the child process.
ZeroMemory( &pi, sizeof(pi) );
si.dwFlags = STARTF_USESHOWWINDOW;

if(bRunOnWinLogonDesktop)
{
    if(csDesktopName.empty())
        si.lpDesktop = _T("winsta0\\default");
    else
        _tcscpy(si.lpDesktop, csDesktopName.c_str());
}

if(bHide)
    si.wShowWindow = SW_HIDE;     /* maybe even SW_HIDE */
else
    si.wShowWindow = SW_SHOW;     /* maybe even SW_HIDE */



TCHAR szCmdLine[512];
_tcscpy(szCmdLine, csCmdLine.c_str());

if( !CreateProcess( NULL,
                szCmdLine,
               NULL,
               NULL,
               FALSE,
               CREATE_NEW_PROCESS_GROUP,
               NULL,        
               NULL,        
               &si,        
               &pi ) ) 

【问题讨论】:

  • CREATE_NEW_PROCESS_GROUP 标记有帮助吗?
  • 你为什么要杀死进程树?
  • @sharptooth :我尝试过 CREATE_NEW_PROCESS_GROUP 但它仍然是作为我正在运行的应用程序的子级创建的..
  • 应用程序要求当进程树被任务管理器杀死时,子进程不应该死亡

标签: c++ winapi createprocess


【解决方案1】:

关闭子进程的线程和进程处理程序后,它在Process Explorer中仍然是子进程,但结束父进程不会导致子进程终止。

CreateProcess( NULL,
            szCmdLine,
           NULL,
           NULL,
           FALSE,
           CREATE_NEW_PROCESS_GROUP,
           NULL,        
           NULL,        
           &si,        
           &pi ); 
if(pi.hThread)
    CloseHandle(pi.hTread);
if(pi.hProcess)
    CloseHandle(pi.hProcess);

我在ReactOSsources of cmd.exe中发现了这个决定,在执行'start'命令的过程中。

【讨论】:

    【解决方案2】:

    创建一个中间进程(使用 create_new_process_group),然后创建真正的进程。

    Service
      -> Intermediate Process
         -> Real Process
    

    中间进程应在启动实际进程后立即退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 2011-06-22
      • 2015-07-23
      • 2019-01-09
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多