我在Visual Studio中有简单的代码,
#include <iostream>
using std::cout;
int main()
{
cout << "Hello World";
return 0;
}
请参考图片。
我放置断点并以调试模式启动。在断点命中后,我在cmd.exe(Administrator)中运行以下命令来强制终止进程。它显示了成功的信息。
taskkill /IM debug.exe /F
仍然,我可以在任务管理器中看到Debug.exe。为什么没有被杀?有没有其他方法来杀死这个过程?
请注意我不能使用pskill
或SysInternals的任何其他工具。
答案 0 :(得分:1)
在Windows上,所有进程都有句柄。如果您曾经使用过Win32 API,则可能会看到HINSTANCE
或HANDLE
。
根据我所阅读的内容以及我观察到的内容,特别是我发送给您的链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v=vs.85).aspx它提到了
当进程终止时,其内核对象直到被破坏 已释放具有该进程的打开句柄的所有进程 那些把柄。
这表明该计划将保持“活着”状态。直到所有句柄都被释放,就像文件一样。
这只是一个猜测,但是当命令提示写入&#34时,该过程已经终止&#34;这可能意味着该过程已被发送终止信号,预示着其死亡。
我绝不是这方面的专家,但我认为可以安全地说(如果没有大师能够纠正我的话),你根本无法杀死那些&# #39;正在Windows中使用,调试器正在使用您的程序,就像文件一样。尝试向调试器发送一个kill信号,看看是否有帮助?
TL; DR:调试器有一个处理过程(可能是因为它可能是调试器的子进程)因此你无法杀死它直到最后一个句柄是你的。