【发布时间】:2010-11-22 20:22:53
【问题描述】:
我的理解是,当您在 Windows XP 中通过任务管理器杀死 C++ 应用程序时,该应用程序仍然“干净”地被破坏 - 即调用堆栈将展开并且所有相关的对象析构函数都将被调用。不知道我的理解是否有误。
是否可以在不展开堆栈的情况下立即终止此类应用程序?
例如,应用程序可能会使用 RAII 模式,当对象被破坏时会破坏或释放资源。如果通过任务管理器的传统“终止进程”是正常的,那么提供一种立即终止应用程序的方法可以让我测试不正常的关机(例如断电)。
编辑:
澄清一下,我正在寻找一个可以让我这样做的现有实用程序或程序。我应该能够在我没有源代码的程序上使用该解决方案,这意味着程序化解决方案实际上是不可接受的。
编辑:
只是为了提供更多上下文,有时我必须使用非常侵入性的 3rd 方服务(例如,每隔一小时就唠叨我重新启动)。因为我知道我不需要需要重新启动,所以我想终止进程/服务,这样它就不会再烦我了。不幸的是,一些 3rd 方开发人员“聪明”到足以阻止我这样做,当我通过任务管理器终止进程时,系统将立即重启(我猜是使用 RAII 来实现这一点)。
【问题讨论】:
-
我怀疑 nag 服务的重生使用的是 RAII。
-
nag 服务没有重新生成 - 它正在被杀死,但在死亡时计算机将重新启动。
-
对我来说,这听起来好像 nag 进程是由另一个进程产生的,它实际上只是在等待 nag 进程完成以便它可以重新启动。您是否尝试过使用 Process Explorer 查看是否有另一个 3rd 方进程被列为 nag 进程的父进程?如果是这样,也许你可以杀死父进程(或者至少在杀死 nag 进程之前暂停它)。
-
不属于 SO,我引用:“程序化解决方案并不是我真正追求的”
-
任务管理器的“进程”选项卡强制终止。 “应用程序”选项卡执行您所说的干净关闭。
标签: c++ process windows-xp callstack raii