作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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,nil,False,CREATE_SUSPENDED,
nil,nil,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? 中所述。
关于delphi - 挂起子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827242/
我是一名优秀的程序员,十分优秀!