Leo*_*Hat 2 c++ callstack windows-xp raii process
我的理解是,当您通过Windows XP中的任务管理器终止C++应用程序时,应用程序仍然"干净地"被破坏 - 即调用堆栈将展开并且将调用所有相关的对象析构函数.不确定我的理解是不是错了.
是否有可能立即杀死这样的应用程序,而无需展开堆栈?
例如,应用程序可以使用RAII模式,当对象被破坏时,RAII模式将破坏或释放资源.如果通过任务管理器的传统"终止进程"是优雅的,提供一种立即终止应用程序的方法将允许我测试非正常关闭(例如断电).
编辑:
只是为了澄清,我正在使用现有的实用程序或程序来允许我这样做.我应该能够在我没有源代码的程序上使用该解决方案,这意味着程序化解决方案不是真的可以接受.
编辑:
只是为了提供更多的上下文,有时候我必须使用非常干扰的第三方服务(例如,每隔一小时唠叨我就重新启动).因为我知道我不需要重新启动,所以我想杀死进程/服务,所以它不再惹恼我了.不幸的是,一些第三方开发人员"聪明"足以阻止我这样做,当我通过任务管理器终止进程时,系统将立即重启(我猜这是使用RAII来实现这一点).
我相信任务管理器通过发送WM_CLOSE消息尝试"好"关闭,然后如果应用程序没有响应它就被杀死了.
此调用应立即终止进程而不发出警告:
例如:
TerminateProcess(GetCurrentProcess(), 1);
Run Code Online (Sandbox Code Playgroud)
更新:
您可能会发现这篇文章很有趣:
更新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)