приостановка дочернего процесса - PullRequest
4 голосов
/ 12 января 2012

Я создаю дочерний процесс с помощью 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;

1 Ответ

4 голосов
/ 12 января 2012

С точки зрения Windows API нет такой вещи, как приостановка процесса. Только потоков могут быть приостановлены, но нет никаких родительско-дочерних отношений между потоками. Поскольку нет «дочерних потоков», не существует автоматического механизма их приостановки, когда родительский поток приостановлен. (Вы можете создать процесс, приостановленный, но это потому, что когда он впервые создан, существует только один поток, а он создается приостановленным.)

Если вы хотите приостановить все потоки дочернего процесса, перечислите их и приостановите их так же, как приостановите потоки родительского процесса.

Вы также можете попробовать недокументированную функцию NtSuspendProcess, как упоминалось в Windows: атомная приостановка всего процесса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...