私は、creatprocess api.Andで子プロセスを作成しています。私はjobobjectを作成し、この子プロセスをjobobjectに割り当てました。
親プロセスを終了すると、子プロセスも終了します。しかし、親プロセスを中断すると、子プロセスは中断せずに実行を継続します。
親プロセスが中断された場合、子プロセスを中断するオプションはありますか?私は、Windows APIの観点から子プロセスを中断する
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;
ようこそで述べたようにあなたはまた、文書化されていない
NtSuspendProcess
機能を試してみてください。一度起動すると、何かを一時停止してはいけません。スレッドが*自体を一時停止している場合を除き、スレッドが停止しても安全であるかどうかは分かりません。それはIO操作の途中にある可能性があります。または、たとえば、メモリマネージャのロックを保持している可能性があります。あなたが解決しようとしている問題が何であれ、私は別の解決策を見つけることをお勧めします。あなたの問題を記述することができれば、ここでStack Overflowに投稿することができます。 –こんにちは。私の問題は、私はセキュリティアプリケーションを開発し、このアプリケーションはハードウェアで何らかの操作を行い、何かが間違っていると、それが作成したプロセスを終了しているということです。私の問題は、プロセスエクスプローラを使用してメインプロセスを中断した場合、作成したプロセスが実行を継続し、メインアプリケーションがそれらのプロセスを制御できなくなることです。セキュリティ管理はできません。そして、子プロセスは私によって開発されていない、私はそれらのソースコードを持っていない。 – galove
私は新しい質問の投稿であなたの問題を説明することを意味しました。私はあなたの問題を理解していません。なぜあなたは最初にプロセスを中断しているのか分からなかった。 –