Process 你能冻结信用证吗+;处理并在其他主机上继续?

Process 你能冻结信用证吗+;处理并在其他主机上继续?,process,coredump,process-migration,Process,Coredump,Process Migration,我想知道是否有可能生成一个“核心”文件,将if复制到另一台机器上,然后在那个台机器上继续执行一个核心文件 我见过gcore实用程序,它将从运行的进程生成核心文件。但我不认为gdb可以基于核心文件继续执行 有没有什么方法可以直接转储堆/堆栈,并在以后恢复它们?它被称为 过去也能做到这一点。现在,迁移整个虚拟机是最容易的。我认为这是不可能的。但是,您可能需要研究虚拟化软件,例如,它可以将整个系统映像从一台机器冻结并移动到另一台机器。通常,这不足以让任意进程在另一台机器上继续。除了堆和堆栈状态外,还可

我想知道是否有可能生成一个“核心”文件,将if复制到另一台机器上,然后在那个台机器上继续执行一个核心文件

我见过gcore实用程序,它将从运行的进程生成核心文件。但我不认为gdb可以基于核心文件继续执行

有没有什么方法可以直接转储堆/堆栈,并在以后恢复它们?

它被称为


过去也能做到这一点。现在,迁移整个虚拟机是最容易的。

我认为这是不可能的。但是,您可能需要研究虚拟化软件,例如,它可以将整个系统映像从一台机器冻结并移动到另一台机器。

通常,这不足以让任意进程在另一台机器上继续。除了堆和堆栈状态外,还可能存在打开的I/O句柄、分配的硬件资源等

您可以选择以一种方式显式编写软件,使其在信号上转储状态,然后从转储状态恢复,或者在虚拟机中运行软件并将其迁移到备用主机—Xen和Vmware都支持冻结/恢复以及实时迁移


也就是说,我们试图做到这一点,但偶尔也会成功。

在现代系统上,不是从核心文件,不,你不能。用于在Linux上冻结和恢复单个进程,新的正在开发中,但它们的能力目前相当有限。其他虚拟化软件可以冻结和恢复整个系统。

在某些情况下,这是可以做到的。例如,Emacs构建过程的一部分是加载所有Lisp库,然后将内存映像转储到磁盘上以便快速加载。其他一些语言解释器也这样做(我主要考虑Lisp和Scheme实现)。然而,它们是专门为这种用途设计的,所以我不知道它们需要做什么特殊的事情才能让它工作

我认为这对于一个随机程序来说是很难做到的,但是如果你编写了一个框架,其中所有对象都支持序列化/反序列化,那么你就可以序列化你的程序使用的所有对象,然后将它们发送到别处,并在另一端反序列化它们


其他人关于虚拟化的答案也在现场。

取决于机器。例如,它在一个非常小的嵌入式系统中是非常可行的。我认为它在Beowulf集群和其他超级计算机应用程序中也有实现。

也可以查看该项目。Condor也可以通过并行作业实现这一点。Condor还包括监视器,当某些进程(例如)再次开始使用其工作站时,可以自动迁移您的进程。它确实是为在网络环境中利用空闲周期而设计的。

有很多原因使您无法轻松完成自己想要的任务。例如,当您在另一台计算机上还原核心文件时,如何解析您处理的已打开的文件描述符?套接字、命名管道、信号量或任何其他操作系统级资源呢?基本上,除非您的系统专门设计用于处理此类操作,否则您无法天真地转储核心文件并将其移动到另一台机器

截至2017年2月,有一个相当稳定和成熟的工具,名为,它依赖于对3.11版Linux内核的更新(正如2013年9月所做的那样,大多数现代发行版都应该将这些更新整合到其内核版本中)

只需调用
sudo-apt-get-install-criu
,即可通过智能安装


这与C/C++有什么关系?同意camh的意见,请删除C/C++参考。您可以有一个流程,其代码完全是asm,并且问题是有效的。