gpt4 book ai didi

delphi - 挂起子进程

转载 作者:行者123 更新时间:2023-12-03 15:29:29 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com