是否可以中断进程并检查它以便稍后恢复?

时间:2012-05-08 12:46:22

标签: c linux x86-64 checkpoint

让我们说,你有一个应用程序,它消耗了所有的计算能力。现在你想做一些其他必要的工作。在Linux上是否有任何方法可以中断该应用程序并检查其状态,以便稍后可以从中断的状态恢复它?

特别是我对某种方式感兴趣,可以在另一台机器上停止并重新启动应用程序。这也可能吗?

5 个答案:

答案 0 :(得分:5)

一般而言,检查点进程并非完全可能(因为进程不仅是一个地址空间,还有其他资源,如文件描述符和TCP / IP套接字......)。

在实践中,您可以使用一些检查点库,如BLCR等。在某些限制条件下,您可以将检查点图像从一个系统迁移到另一个系统(非常类似于源系统:相同的内核) ,相同版本的库和编译器等。)。

virtual machine级别也可以迁移图像。其中一些非常好。

您还可以使用自己的检查点设备设计和实施您的软件。然后,您应该考虑使用garbage collection技术和术语。另请参阅Emacs(或Xemacsunexec.c文件(与机器有很大关系)。

某些语言的实施&运行时具有检查点基元。 SBCL(一个免费的Common Lisp实现)能够save a core image并在以后重新启动它。 SML / NJ能够export an imageSqueak(Smalltalk实现)也具备这种能力。

作为检查点的另一个例子,GCC编译器实际上能够使用persistence techniques编译单个*.h标头(进入预编译的头文件,这是GCC堆的持久映像)

详细了解orthogonal persistence。它也是一个研究课题。 serialization也是相关的(您可能希望使用JSON,YAML,XML等文本格式)。您也可以使用hibernation技术(在整个系统级别上)。

答案 1 :(得分:3)

从手册页man kill

中断流程需要两个步骤:

停止

kill -STOP <pid>  

继续

kill -CONT <pid>

其中<pid>是进程ID。

答案 2 :(得分:2)

键入:Control + Z以暂停进程(它发送SIGTSTP)

然后bg / fg在后​​台或前台恢复

答案 3 :(得分:1)

在POSIX上从根本上无法检查单个流程。那是因为过程不是独立的;他们可以互动。如果没有别的,一个进程有一个唯一的进程ID,它可能存储在内部的某个地方,如果你用一个不同的进程ID恢复它,所有的地狱都可能会崩溃。如果进程使用任何类型的锁/同步原语,则尤其如此。当然,您也无法使用原来的相同的进程ID恢复该进程,因为这可能是由新进程执行的。

也许你可以通过使进程(和线程)id大约128位来解决这个问题,这样它们就是普遍独特的......

答案 4 :(得分:0)

在Linux上,通过发送此进程STOP信号可以实现。仪表通过发送CONT信号恢复它。请参阅kill手册。