【问题标题】:How to hibernate application?如何休眠应用程序?
【发布时间】:2012-07-08 06:10:01
【问题描述】:

我的问题可能看起来太奇怪了,但我想到了 Windows 休眠的事情,我想知道是否有办法让特定的进程或应用程序休眠。 即:当 Windows 从正常关机/重新启动时,它会正常加载所有启动程序,但除此之外,它还会在关闭计算机之前加载具有其先前状态的特定程序。

虽然我有关于保留内存位置并在计算机启动时将其取回,但是在 windows 环境中是否有任何应用程序可以做到这一点?

【问题讨论】:

  • 这不太可能奏效,因为内存中引用的共享内容会移动。
  • 我能想到的最接近的事情是创建一个完整的进程转储,然后在重新启动后对其进行调试,而不是作为常规程序启动它。这将让您存储程序的状态,但您必须想办法让调试会话看起来像正常启动。如果可能的话。但总的来说,序列化可能是这种休眠的正确机制。

标签: windows process operating-system


【解决方案1】:

那是行不通的。进程的状态几乎从不只包含在进程本身中。 gui 应用程序创建存储在与桌面关联的堆中的 user32 和 gdi 对象。它调用影响窗口管理器状态的 Windows。它进行 I/O 调用,导致驱动程序内部的代码运行。这反过来会影响内核池内的分配。将麻烦乘以它打开以与其他进程通信的每个管道或 rpc 通道。以及剪贴板等共享资源。

仅对整个操作系统状态进行快照即可。

【讨论】:

  • 在 Windows 8 中会有一些像 OP 想要的东西,但仅限于内部核心组件(驱动程序、内核)。当系统关闭时,将 - 与用户应用程序不同 - 仅休眠。
  • 非常感谢您提供这些重要信息,我现在知道我真正需要什么了。
【解决方案2】:

现在有多种解决方案,在 Linux 操作系统中:CRIU、CryoPID2、BLCR。

我认为可以使用 docker(适用于 windows 和 linux),但它需要在 docker 中预先打包您的应用程序,这会产生一些开销。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2011-08-21
    相关资源
    最近更新 更多