재부팅 후 계속하려면 전체 프로세스를 저장하십시오.

재부팅 후 계속하려면 전체 프로세스를 저장하십시오.

나는 아마도 완료하는 데 몇 달이 걸릴 상당히 어려운 수학 문제에 대한 알고리즘을 개발했습니다. 리소스가 제한되어 있으므로 Ubuntu 12.04(x86) 노트북에서 이 작업을 시작했습니다. 이제 일부 업데이트를 설치하고 실제로 노트북을 다시 시작하고 싶습니다("다시 시작하세요" 메시지는 짜증스럽습니다).

재부팅 후에도 계속 실행되도록 할당된 메모리를 포함하여 전체 프로세스를 저장하는 방법이 있습니까?

다음은 귀하에게 필요할 수 있는 프로세스에 대한 몇 가지 정보입니다. 필요한 경우 추가 정보를 문의하시기 바랍니다.

  • "" 또는 "time ./binary > ./somefile &" 명령을 사용하여 터미널에서 프로세스를 호출했는데 ./binary > ./somefile &잘 기억나지 않습니다.
  • 일부 디버그 정보를 std::cerr에 인쇄합니다(드물게).
  • 현재 약 600.0kiB를 사용하고 있으며, 이 숫자가 증가하더라도 빠르게 증가할 가능성은 낮습니다.
  • 프로세스가 보통 우선순위로 실행됩니다.
  • 커널은 3.2.0-26-generic-pae, CPU는 AMD, 운영 체제는 Ubuntu 12.04 x86입니다.
  • 9일 14시간 동안 진행되었습니다(취소하기에는 너무 길었습니다 ;-))

답변1

가장 좋고 가장 쉬운 해결책은 프로그램을 변경하여 상태를 파일에 저장한 다음 파일을 재사용하여 프로세스를 재개하는 것입니다.

Wikipedia 페이지를 기반으로애플리케이션 스냅샷다양한 옵션이 있습니다:

  1. 게다가냉각제하지만 유지되지는 않는 것 같습니다.
  2. Linux 체크포인트/다시 시작좋은 옵션인 것 같지만 커널을 활성화해야 합니다 CONFIG_CHECKPOINT_RESTORE.
  3. 크루최신 프로젝트일 수도 있고 최선의 선택일 수도 있지만 특정 상황에 따라 달라질 수도 있습니다.커널 옵션배포판이 아직 설정되지 않았을 수 있습니다.

너무 늦었지만 또 다른 보다 실용적인 접근 방식은 전용 가상 머신에서 프로세스를 시작한 다음 전체 가상 머신을 일시 중지했다가 다시 시작하는 것입니다. 하이퍼바이저에 따라 호스트 간에 컴퓨터를 이동할 수도 있습니다.

앞으로는 장기 실행 프로세스를 실행할 위치, 병렬화 방법, 디스크 가득 참, 프로세스 종료 등과 같은 문제를 처리하는 방법을 고려하세요.

답변2

다소 "저렴한" 방법은 가상 머신에서 처리를 수행하는 것입니다(예: VirtualBox 사용). 가상 머신을 일시 중지하고 종료하기 전에 상태를 저장하십시오. 시작 후 가상 머신과 상태를 복원합니다.

단점은 작업을 종료하고 다시 시작해야 한다는 것입니다. 하지만 실제로 몇 달 동안 실행하면 9일 차이는 미미해집니다(6개월에 5% 증가).


편집하다:나는 Ulrich가 이미 그의 목록의 항목 4에서 이것을 언급했다는 것을 방금 깨달았습니다.

특히 대안 중 어느 것도 신뢰할 수 있는 솔루션이 아닌 것 같기 때문에 여전히 이를 옵션으로 고려하는 것이 좋습니다. 각각 작동하지 않는 이유가 있습니다.

가장 좋은 방법은 이들 중 하나를 시도해 보고 작동하지 않으면 가상 머신에서 작업을 다시 시작하는 것입니다.

답변3

도구를 살펴보세요동결된 PID.

홈 페이지에서: "CryoPID를 사용하면 Linux에서 실행 중인 프로세스의 상태를 캡처하여 파일에 저장할 수 있습니다. 그런 다음 파일을 사용하여 나중에 재부팅한 후 또는 다른 컴퓨터에서도 프로세스를 재개할 수 있습니다."

답변4

결국 프로그램을 다시 시작해야 하는 경우 코드에 일부 기능을 추가하는 데 시간을 할애하는 것이 좋습니다. 이렇게 하면 나중에 시간을 절약할 수 있습니다.

프로세스가 오랫동안 실행될 예정이고 실행 중에 프로세스가 충돌하는 경우 컴퓨터를 다시 시작할 때 전체 프로세스 상태를 저장하는 것은 큰 도움이 되지 않을 수 있습니다.

프로그램을 파일로 출력하여 데이터를 "체크포인트"하는 것이 좋습니다. 이 데이터는 검사점 파일이 저장되었을 때의 상태에서 프로그램을 복구할 수 있을 만큼 충분해야 합니다. 전체 프로세스를 저장할 필요는 없으며 계산에 사용된 관련 변수의 스냅샷만 저장하면 중단된 부분부터 계산을 다시 시작할 수 있습니다. 또한 코드에는 시작 상태를 가져오기 위해 이 파일에서 데이터를 읽는 방법이 포함되어야 합니다.

신호를 보낼 때 이러한 체크포인트 파일 중 하나를 저장하도록 코드를 설정할 수 있으므로 언제든지 계산의 "상태"를 저장할 수 있습니다.

또한, 계산이 진행되면서 데이터가 어떻게 변경되는지 확인할 수 있다는 것 자체도 흥미로울 수 있습니다!

관련 정보