criu简单例子

CRIU(Checkpoint/Restore In Userspace)是运行在linux操作系统上的一个开源软件,其功能是在用户空间实现Checkpoint/Restore功能。

github地址如下:https://github.com/checkpoint-restore/criu

本人选取的版本是3.12,本人的操作系统是centos7.6

先写一个简单的程序代码(criutest.c):

#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{int i = 0;FILE *fp = NULL;char szWrite[50] = {0};fp = fopen("/chkpnt/criutest.txt", "a");if(fp==NULL){printf("fopen failed\n");return -1;}while(1){printf("[%d], Hello world!\n", i);sprintf(szWrite, "[%d], Hello world!\n", i);fwrite(szWrite, strlen(szWrite), 1, fp);fflush(fp);sleep(3);i++;}return 0;
}

该程序会往控制台以及文件中写入字符串,
在这里插入图片描述

现在开始dump该进程,代码如下(libcriudumptest.c):

#include "criu.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <fcntl.h>int main(int argc, char **argv)
{int pid = 0;int fd = 0;int ret = 0;int childpid = 0;if(argc < 2){printf("argc is 1\n");return -1;}pid = atoi(argv[1]);criu_init_opts();criu_set_pid(pid);criu_set_leave_running(false);fd = open("/chkpnt/img/", O_DIRECTORY);criu_set_images_dir_fd(fd);criu_set_shell_job(true);ret = criu_dump();if(ret < 0){printf("criu_dump failed\n");return -1;}printf("criu_dump succeed\n");return 0;
}

其中该程序运行时,需要输入一个参数,待dump的进程pid,dump路径代码中写死了,为/chkpnt/img。
在这里插入图片描述
可以看到,显示dump成功,在/chkpnt/img目录下,可以看到生成的dump文件
在这里插入图片描述

代码中criu_set_leave_running(false)表示dump后杀死进程,criutest最后的运行结果如下:
在这里插入图片描述
可以看到,criutest在打印到98后,被dump然后接着被杀死。
恢复运行时,就应该从99开始。

现在编写restore功能,代码如下(libcriurestoretest.c):

#include "criu.h"
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <fcntl.h>int main(int argc, char **argv)
{int fd = 0;int ret = 0;char *dumpdir;if(argc < 2){printf("argc is 1\n");return -1;}dumpdir = argv[1];criu_init_opts();fd = open(dumpdir, O_DIRECTORY);criu_set_images_dir_fd(fd);criu_set_shell_job(true);ret = criu_restore();if(ret < 0){printf("criu_restore failed\n");return -1;}printf("criu_restore succeed\n");return 0;
}

很明显,该程序需要一个输入参数,dump路径,运行该程序,如下图所示:
在这里插入图片描述
很明显,打印从99开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/126893.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多地智能停车场系统,如何实现数据互联互通?

某公司是从事嵌入式工控车牌自动识别系统、RFID蓝牙远距离读写系列、RFID电子标签系列、智能卡停车场、门禁一卡通智能管理系统、公务车派遣系统、运输车统计系统设备的开发、设计、制造、安装、调试及售后服务的企业。在智能卡停车场系统设备、人员通道闸设备方面有多项国家专…

经典算法----迷宫问题(找出所有路径)

目录 前言 问题描述 算法思路 定义方向 回溯算法 代码实现 前言 前面我发布了一篇关于迷宫问题的解决方法&#xff0c;是通过栈的方式来解决这个问题的&#xff08;链接&#xff1a;经典算法-----迷宫问题&#xff08;栈的应用&#xff09;-CSDN博客&#xff09;&#xff…

MongoEngine 简介安装、连接、数据类型及其参数详解

文章目录 前言一、MongoEngine 简介二、MongoEngine的安装与连接1. 安装MongoEngine2. 连接到MongoDB3. 定义数据模型 三、MongoEngine模型介绍1. 常见数据类型2. 数据类型参数 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方…

环面上 FHE 的快速自举:LUT/Automata Blind Rotate

参考文献&#xff1a; [AP14] Alperin-Sheriff J, Peikert C. Faster bootstrapping with polynomial error[C]//Advances in Cryptology–CRYPTO 2014: 34th Annual Cryptology Conference, Santa Barbara, CA, USA, August 17-21, 2014, Proceedings, Part I 34. Springer B…

Go Gin Gorm Casbin权限管理实现 - 1. Casbin概念介绍以及库使用

文章目录 0. 背景1. 核心概念1.1 Model1.2 Policy1.3 实例分析1.3 ACL模型和RBAC模型1.3.1 ACL模型1.3.2 RBAC模型 2. 库使用2.1 Enforcer 执行器概念2.2 adapter 适配器概念2.3 Functions(Matchers中的函数) 3. 结语 0. 背景 Casbin是用于Golang项目的功能强大且高效的开源访问…

自动驾驶学习笔记(一)——Apollo平台

#Apollo开发者社区# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《2023星火培训【感知专项营】》免费课程—>传送门 文章目录 前言 Apollo框架 开发平台 总结 前…

阿里影业+大麦,开启大文娱新纪元?

被“精心呵护”长达十年后&#xff0c;阿里大文娱在今年终于踏上了关键节点。 3月份&#xff0c;阿里“16N”组织大变革后&#xff0c;大文娱集团独自上路。8月&#xff0c;“分家”后的第一份财报显示&#xff0c;阿里大文娱集团成功大幅扭亏&#xff0c;实现了首次季度经调整…

应用层协议 HTTP

一、应用层协议 我们已经学过 TCP/IP , 已然知道数据能从客户端进程经过路径选择跨网络传送到服务器端进程。 我们还需要知道的是&#xff0c;我们把数据从 A 端传送到 B 端&#xff0c; TCP/IP 解决的是顺丰的功能&#xff0c;而两端还要对数据进行加工处理或者使用&#xf…

图形学中一些基本知识的总结与复习

前言 在过完games101课程后仍然觉得自己还有许多地方不懂与遗漏&#xff0c;以此来补充与复习一些其中的知识。 参考&#xff1a;Games101、《Unity Shader 入门精要》 GPU渲染流水线(GPU Rendering Pipeline) ----注&#xff1a;Games101课程中所展示渲染流程与书中有所不同&…

tomcat整体架构

Tomcat介绍 Tomcat是Apache Software Foundation&#xff08;Apache软件基金会&#xff09;开发的一款开源的Java Servlet 容器。它是一种Web服务器&#xff0c;用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境&#x…

土木硕设计院在职转码上岸

一、个人介绍 双非土木硕&#xff0c;98年&#xff0c;目前在北京&#xff0c;职位为前端开发工程师&#xff0c;设计院在职期间自学转码上岸&#x1f33f; 二、背景 本人于19年开始土木研究生生涯&#xff0c;研二期间去地产实习近半年(碧桂园和世茂&#xff0c;这两家的地产…

Langchain-Chatchat项目:1.1-ChatGLM2项目整体介绍

ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第2代版本&#xff0c;引入新的特性包括更长的上下文(基于FlashAttention技术&#xff0c;将基座模型的上下文长度由ChatGLM-6B的2K扩展到了32K&#xff0c;并在对话阶段使用8K的上下文长度训练)&#xff1b;更高效的推理(基于Mu…