delphi – 暂停子进程
发布时间:2020-12-15 09:16:57 所属栏目:大数据 来源:网络整理
导读:我正在使用creatprocess api创建子进程.我创建了一个jobobject并将此子进程分配给jobobject. ??现在,如果我杀死我的父进程,子进程也会终止.但是如果我挂起父进程,子进程不会挂起并继续执行. ??当父进程被暂停时,是否有任何选项可以暂停子进程? 我用于创建流
我正在使用creatprocess api创建子进程.我创建了一个jobobject并将此子进程分配给jobobject.
??现在,如果我杀死我的父进程,子进程也会终止.但是如果我挂起父进程,子进程不会挂起并继续执行. ??当父进程被暂停时,是否有任何选项可以暂停子进程? 我用于创建流程的Delphi代码 Function ExecuteProcess(EXE : String) : THandle; Var SI : TStartupInfo; PI : TProcessInformation; Begin Result := INVALID_HANDLE_VALUE; FillChar(SI,SizeOf(SI),0); SI.cb := SizeOf(SI); If CreateProcess(nil,PChar('.'+EXE),nil,False,CREATE_SUSPENDED,SI,PI) Then Begin ResumeThread(PI.hThread); CloseHandle(PI.hThread); Result := PI.hProcess; End Else ShowMessage('CreateProcess failed: '+ SysErrorMessage(GetLastError)); End; 解决方法
从Windows API的角度来看,没有暂停进程的事情.只能挂起线程,但线程之间没有父子关系.由于没有“子线程”,因此在父项被挂起时没有自动挂起它们的机制. (您可以创建一个暂停的进程,但那是因为当它首次创建时,只有一个线程,并且它被创建为暂停.)
如果要挂起子进程的所有线程,则enumerate them并以挂起父进程的线程的方式挂起它们. 您也可以尝试使用未记录的NtSuspendProcess函数,如Windows: Atomically suspend an entire process?中所述 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |