나는 놀고 싶다크루, 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
너는 읽어야 해문서더 가까이:
실행(격리)
이제, 단순히 이와 같은 프로그램을 실행하고 덤프하려고 시도하면 cruu는 실패할 것입니다. 그 이유는 셸에서 시작된 프로그램이 셸과 일부 공통 리소스, 특히 세션 및 터미널을 공유하기 때문입니다. Criu에는 그러한 리소스가 존재하지 않는지 확인하는 검사 기능이 내장되어 있습니다.
현재 터미널에서 종속성을 제거하려면 새 세션에서 스크립트를 실행하고 해당 출력을 파일로 리디렉션해 보겠습니다.
$setsid./test.sh</dev/null&>test.log&[2]2220[2]+완전한
setid./test.sh</dev/null&>test.log
답변2
이 일련의 명령은 내 시스템에서 작동합니다.
sudo criu dump --images-dir ~/checkpoint --tree 2459 --shell-job
sudo criu restore -D ~/checkpoint --shell-job