Я не могу убить дочерний процесс с помощью TerminateProcess

У меня есть проблема, чтобы убить дочерний процесс с помощью TerminateProcess, Я вызываю эту функцию, и процесс все еще там (в диспетчере задач). Этот фрагмент кода многократно вызывается при запуске одной и той же программы.exe, и эти процессы выполняются в диспетчере задач, что, на мой взгляд, не очень хорошо.
На самом деле все время создается два процесса: program.exe и conhost.exe.

Я буду очень признателен за любую помощь.

Вот код:

STARTUPINFO childProcStartupInfo;
memset( &childProcStartupInfo, 0, sizeof(childProcStartupInfo));
childProcStartupInfo.cb = sizeof(childProcStartupInfo);
childProcStartupInfo.hStdInput = hFromParent;   // stdin
childProcStartupInfo.hStdOutput = hToParent;    //  stdout
childProcStartupInfo.hStdError = hToParentDup;  // stderr
childProcStartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
childProcStartupInfo.wShowWindow = SW_HIDE;PROCESS_INFORMATION childProcInfo;  /* for CreateProcess call */bOk = CreateProcess(
NULL,           // filename
pCmdLine,   // full command line for child
NULL,           // process security descriptor */
NULL,           // thread security descriptor */
TRUE,           // inherit handles? Also use if STARTF_USESTDHANDLES */
0,              // creation flags */
NULL,           // inherited environment address */
NULL,           // startup dir; NULL = start in current */
&childProcStartupInfo,          // pointer to startup info (input) */
&childProcInfo);            // pointer to process info (output) */

CloseHandle( hFromParent );
CloseHandle( hToParent );
CloseHandle( hToParentDup );

CloseHandle( childProcInfo.hThread);
CloseHandle( childProcInfo.hProcess);

TerminateProcess( childProcInfo.hProcess ,0);  //this is not working, the process

0

Решение

Есть две возможные причины, о которых я знаю:

  • вы не можете завершить процесс, запущенный в контексте безопасности, отличном от того, который вызывает TerminateProcess (посмотреть здесь)
  • процесс делать что-то в ядре режим (например, некоторые незавершенные операции ввода-вывода драйвером и т. д.) — я считаю, что это было введено в Vista, но я могу ошибаться
3

Другие решения

Других решений пока нет …