是否有可能在不松开调用堆栈的情况下终止Windows XP上的C++应用程序?

Leo*_*Hat 2 c++ callstack windows-xp raii process

我的理解是,当您通过Windows XP中的任务管理器终止C++应用程序时,应用程序仍然"干净地"被破坏 - 即调用堆栈将展开并且将调用所有相关的对象析构函数.不确定我的理解是不是错了.

是否有可能立即杀死这样的应用程序,而无需展开堆栈?

例如,应用程序可以使用RAII模式,当对象被破坏时,RAII模式将破坏或释放资源.如果通过任务管理器的传统"终止进程"是优雅的,提供一种立即终止应用程序的方法将允许我测试非正常关闭(例如断电).

编辑:

只是为了澄清,我正在使用现有的实用程序或程序来允许我这样做.我应该能够在我没有源代码的程序上使用该解决方案,这意味着程序化解决方案不是真的可以接受.

编辑:

只是为了提供更多的上下文,有时候我必须使用非常干扰的第三方服务(例如,每隔一小时唠叨我就重新启动).因为我知道我不需要重新启动,所以我想杀死进程/服务,所以它不再惹恼我了.不幸的是,一些第三方开发人员"聪明"足以阻止我这样做,当我通过任务管理器终止进程时,系统将立即重启(我猜这是使用RAII来实现这一点).

Tim*_*ter 8

我相信任务管理器通过发送WM_CLOSE消息尝试"好"关闭,然后如果应用程序没有响应它就被杀死了.

此调用应立即终止进程而不发出警告:

了TerminateProcess

例如:

TerminateProcess(GetCurrentProcess(), 1);
Run Code Online (Sandbox Code Playgroud)

更新:

您可能会发现这篇文章很有趣:

退出时间:退出C++程序

更新2:

我应该能够在我没有源代码的程序上使用该解决方案

嗯,这是99.9%的时间不良行为.

SysInternals有一个名为pskill:

http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx

但我不确定它是多么"好".

你可能需要自己动手,但它应该很简单:

DWORD pid = <get pid from command line>;

TerminateProcess(OpenProcess(PROCESS_TERMINATE, FALSE, pid));
Run Code Online (Sandbox Code Playgroud)