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

2024-04-17

我的理解是,当您在 Windows XP 中通过任务管理器终止 C++ 应用程序时,该应用程序仍然“干净”地被破坏 - 即调用堆栈将展开并且所有相关的对象析构函数将被调用。不知道我这里的理解是否有误。

是否可以立即终止这样的应用程序而不展开堆栈?

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

Edit:

澄清一下,我正在寻找一个可以让我做到这一点的现有实用程序或程序。我应该能够在没有源代码的程序上使用该解决方案,这意味着编程解决方案实际上是不可接受的。

Edit:

只是为了提供更多背景信息,有时我必须使用非常具有侵入性的第三方服务(例如,每小时催促我重新启动)。既然我知道我不need要重新启动,我想终止进程/服务,这样它就不会再困扰我了。不幸的是,一些 3rd 方开发人员非常“聪明”,足以阻止我这样做,当我通过任务管理器终止该进程时,系统将立即重新启动(我猜测他们正在使用 RAII 来实现此目的)。


我相信任务管理器通过发送 WM_CLOSE 消息来尝试“正常”关闭,然后如果应用程序没有响应,它就会被终止。

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

终止进程 http://msdn.microsoft.com/en-us/library/ms686714%28VS.85%29.aspx

e.g.:

TerminateProcess(GetCurrentProcess(), 1);

Update:

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

退出时间:退出 C++ 程序 http://www.stevejay.net/coding_article_quitting_time.html

更新2:

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

嗯,99.9% 的情况下这都是不良行为。

SysInternals 有一个名为pskill:

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

但我不确定它有多“好”。

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

DWORD pid = <get pid from command line>;

TerminateProcess(OpenProcess(PROCESS_TERMINATE, FALSE, pid));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在不展开调用堆栈的情况下终止 Windows XP 上的 C++ 应用程序? 的相关文章

随机推荐