criu:你好世界不工作

criu:你好世界不工作

我想玩玩克里乌,一个用于检查点/恢复 Linux 进程的项目。为此,我正在使用 criu 的 hello-world,它是检查点并恢复简单循环

我执行了以下步骤:

创建一个简单的循环程序:

$ cat > test.sh <<-EOF
#!/bin/sh
while :; do
    sleep 1
    date
done
EOF
$ chmod +x test.sh

运行:

$ ./test.sh
$ ps -C test.sh
  PID TTY          TIME CMD
  2621 pts/1    00:00:00 test.sh

转储它:

# sudo criu dump -vvvv -o dump.log -t 2621 --shell-job && echo OK
OK

恢复它:

#  sudo criu restore -vvvv -o restore.log --shell-job

恢复不起作用。它应该从中断的地方恢复循环过程。该过程应该继续在控制台中打印,但没有任何反应。也没有错误消息。

我的系统:

乌班图19.04

克里乌3.8.1

答案1

你应该阅读文档更接近:

运行(隔离)

现在,如果您尝试简单地运行并尝试转储这样的程序,criu 将失败。原因是从 shell 启动的程序与 shell 共享一些公共资源,特别是其会话和终端。 Criu 具有内置检查功能,可确保不存在此类资源。

要删除对当前终端的依赖,让我们在新会话中执行脚本并将其输出重定向到文件:

$setsid./test.sh</dev/null&>test.log&[2]2220[2]+完成
setsid./test.sh</dev/null&>test.log

答案2

这一系列命令在我的系统上有效。

sudo criu dump --images-dir ~/checkpoint --tree 2459 --shell-job

sudo criu restore -D ~/checkpoint --shell-job

相关内容