【发布时间】:2018-07-19 16:07:52
【问题描述】:
背景信息:我正在开发一个 Windows 10 应用。在我的应用程序中,一些输出显示在需要新进程的窗口控制台上。
代码片段:
PROCESS_INFORMATION pi;
STARTUPINFO si;
// CreateProcess is defined in processthreadsapi.h
BOOL newProcess = CreateProcess (
0, pszCmdLine, 0, 0, FALSE, DEBUG_THIS_ONLY_PROCESS, 0, 0, &si, &pi
);
在上面的代码 sn-p 中,pszCmdLine 可以是 "cmd.exe /c dir"、"cmd.exe /c ipconfig",或者基本上是任何 Windows 终端 cmd。
问题:在前端,会生成一个新的cmd 控制台,用户可以将其终止。但是,它在后台保持活跃。我在下面附上了截图:
进程累积前:
在上面的片段中,它显示了 "cmd.exe /c dir" 正在执行并输出到一个 cmd 控制台。
进程累积后:
在上面的片段中,它显示了我如何启动相同的cmd 4 次并关闭它 3 次(即计数器是“(4)”,包括主进程)。
现实世界的问题:这实质上是在消耗内存并且会降低性能。
Initial Curiosity:当用户点击“x”时,Windows操作系统不应该处理这个进程的终止吗?
以前有没有人遇到过类似的问题?
【问题讨论】:
-
是否将
DEBUG_THIS_ONLY_PROCESS标志更改为默认帮助? -
你用什么
DEBUG_ONLY_THIS_PROCESS?你真的调试过程吗? -
您是否关闭了 CreateProcess 在 PROCESS_INFORMATION 结构中返回的进程和线程句柄?
-
@SaileshD 你是对的。由于使用“DEBUG_THIS_ONLY_PROCESS”,错误仍然存在。将其更改为默认值(0 或 CREATE_NEW_CONSOLE)解决了问题!
标签: c++ windows multithreading process window