gpt4 book ai didi

c++ - 我无法使用 TerminateProcess 终止子进程

转载 作者:行者123 更新时间:2023-11-28 00:54:01 26 4
gpt4 key购买 nike

我在使用 TerminateProcess 终止子进程时遇到问题。我调用了这个函数,进程仍然存在(在任务管理器中)。这段代码被多次调用,多次启动相同的 program.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

最佳答案

据我所知有两个可能的原因:

  • 您不能终止在与调用 TerminateProcess (see here) 的进程不同的安全上下文下运行的进程
  • 进程是doing something in kernel模式(例如驱动程序未完成的一些 I/O 操作等)- 我相信这是在 Vista 中引入的,但我可能错了

关于c++ - 我无法使用 TerminateProcess 终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485379/

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