是否有可能中断处理和检查点它来恢复它以后?(Is it possible to interrupt

2019-06-24 05:58发布

比方说,你有一个应用程序,它消耗了所有的计算能力。 现在,你想要做一些其他必要的工作。 有什么办法在Linux上,中断该应用程序和检查点的状态,因此以后它可以从它被中断的状态恢复?

尤其是我感兴趣的方式,其中应用程序可以停止和重新启动另一台机器上。 这是可能的吗?

Answer 1:

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

在实践中,你可以使用一些检查点库,例如BLCR等有了一定的限制条件,你也许能够从一个系统迁移检查点图像到另一个(非常类似于源之一:同样的内核,库和编译的版本相同等)。

迁移的图像,也可以在虚拟机级。 其中有些是针对相当不错。

你也可以设计并用自己的检查点机械实现你的软件。 然后,你应该考虑使用的垃圾收集技术和术语。 也期待到Emacs(或XEmacs的 ) unexec.c文件(这在很大程度上依赖于机器)。

有些语言的实现和运行时有检查点的图元。 SBCL (免费Common Lisp实现)能够保存核心映像 ,并重新启动它。 SML / NJ能够输出图像 。 佳乐 (一Smalltalk的实现)也有这样的能力。

作为检查点的另一示例中,GCC编译实际上是能够编译单个*.h头(到预编译的头文件,该文件是GCC堆的持久图像)通过使用持久性的技术 。

了解更多关于正交持久性 。 这也是一个研究课题。 序列化也是相关的(你可能想使用文本格式点菜JSON,YAML,XML,...)。 您还可以使用休眠技术(对整个系统级)。



Answer 2:

从man页面man kill

中断过程需要两个步骤:

停止

kill -STOP <pid>  

接着说

kill -CONT <pid>

其中<pid>是进程ID。



Answer 3:

类型: Control + Z暂停的处理(它发送一个SIGTSTP)

然后bg / fg恢复它在背景或前景



Answer 4:

Checkingpointing单个进程是不可能从根本上POSIX。 这是因为过程不是独立的; 他们可以互动。 如果不出意外,一个进程都有一个唯一的进程ID,它可能会在内部存储的地方,如果你有一个不同的进程ID恢复它,所有的地狱可能挣脱。 如果此进程使用任何类型的锁/同步原语,这一点尤其如此。 当然,你也不能恢复它原来具有相同的进程ID的过程,因为这可能是由一个新的进程作出。

也许你可以解决了制定过程中的问题(线程)IDS 128位左右,这样,他们是通用唯一...



Answer 5:

在Linux上通过发送这个过程中STOP信号achivable。 你福斯产品通过发送CONT信号恢复它。 请参考杀死手册。



文章来源: Is it possible to interrupt a process and checkpoint it to resume it later on?