如何检查点和恢复 Linux 进程如何检查点和恢复 Linux 进程如何检查点和恢复 Linux 进程如何检查点和恢复 Linux 进程
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何检查点和恢复 Linux 进程

假设您有一个正在运行的 Linux 进程,并且想要在冻结后捕获其当前快照。然后从快照加载冻结的进程以恢复。这种进程检查点的概念在各种情况下都非常有用。它可以用于进程备份、实时迁移、更快的启动服务等。实际上有一个用户空间工具可以在Linux上执行进程检查点。

名为 criu 的 Linux 命令行实用程序可以检查点并恢复用户空间中的进程。 criu 可以冻结正在运行的进程或进程树,将其状态转储为一组文件,然后从快照恢复冻结的进程。为了让 criu 工作,必须有内核支持来公开有关 Linux 进程的附加信息。幸运的是,上游 Linux 内核 3.9 已经内置了大部分所需的内核支持。因此,您可以在 3.9 及更高版本的内核上轻松运行 criu。

在本教程中,我将向您展示如何使用 criu 检查点和恢复 Linux 进程。我假设您的系统上已经安装了 Linux 内核 3.9。

在 Linux 上安装 criu

对于 Ubuntu 或 Debian:

要在 Ubuntu 或 Debian 上安装 criu,请首先安装以下先决条件。


$ sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-c-compiler libprotobuf-c0 libprotobuf-c0-dev

然后继续构建 criu,如下所示。


$ wget http://download.openvz.org/criu/criu-0.5.tar.bz2
$ tar xvfvj  crtools-0.5.tar.bz2
$ cd crtools-0.5
$ make

一旦构建成功,它将生成一个名为 crtools 的命令行实用程序,用于检查点和恢复 Linux 进程。

检查点并恢复正在运行的进程

要使用 crtools 对正在运行的进程进行检查点,请运行以下命令。 是正在运行的进程的进程 ID。一旦进程检查点成功完成,进程将被终止,其状态将作为一组文件存储在当前目录中。


$ sudo ./crtools dump -t <PID>

要将转储的进程恢复到其原始运行状态:


$ sudo ./crtools restore -t <PID>

请注意,如果正在运行的进程是直接从 shell 启动的,则必须在 crtools 命令中使用 --shell-job 选项,如下所示。


$ sudo ./crtools dump -t <PID> --shell-job
$ sudo ./crtools restore -t <PID> --shell-job

恢复进程时,crtools 命令会等待恢复的进程完成,然后退出。这是因为当 crtools 恢复进程时,crtools 成为该进程的父进程。

如果您想让 crtools 在进程恢复后立即返回,请使用 --restore-detached 选项,如下所示。然后,恢复的进程将重新成为 init 的父级,因此 crtools 可以立即退出。


$ sudo ./crtools restore -t <PID> --shell-job --restore-detached

criu 还支持打开活动 TCP 连接的进程的检查点/重新启动。此功能利用修复模式下的套接字,Linux 内核 3.5 及更高版本支持该模式。

要检查具有活动 TCP 连接的进程:


$ sudo ./crtools dump -t <PID> --tcp-established

要恢复进程及其先前活动的 TCP 连接:


$ sudo ./crtools restore -t <PID> --tcp-established
©2015-2025 艾丽卡 support@alaica.com