내 Unix 실행 파일의 작업은 긴 계산을 수행하는 것이며 아래 설명된 대로 중단/재개 기능을 추가했습니다.
프로그램은 지금까지 발견된 모든 관련 데이터를 체크포인트 파일에 주기적으로 기록하며, 이 파일은 "복구" 작업의 시작점으로 사용될 수 있습니다.
프로그램을 중단하려면 Ctrl+ 를 사용합니다 C.
이 접근 방식의 유일한 문제점은 프로그램이 파일에 쓰는 동안 중단이 발생하면 쓸모없는 반만 작성된 파일이 남게 된다는 것입니다.
지금까지 찾을 수 있는 유일한 수정 사항은 다음과 같습니다.
- 프로그램 만들기
- 재부팅 시 그 중 하나를 읽을 수 있도록 두 개의 파일을 작성합니다.
"중단 가능한" Unix 실행 파일을 생성하는 더 깨끗하고 더 나은 방법이 있습니까?
답변1
이는 프로그램 자체 충돌에만 관심이 있는지 아니면 전체 시스템 충돌에 관심이 있는지에 따라 다소 다릅니다.
첫 번째 경우에는 새 데이터를 새 파일에 쓴 다음 쓰기를 마친 후에만 실제 이름으로 이름을 바꿀 수 있습니다. 이렇게 하면 파일에 이전 또는 새 체크포인트 데이터가 포함되지만 부분적인 정보만 포함되지는 않습니다. 부분 쓰기는 어떤 경우에도 드물지만 체크포인트 코드 자체가 실패할 가능성이 낮다고 가정하고 관련이 있는 경우신호프로그램이 종료되기 전에 새 체크포인트를 그대로 저장하는지 확인하기 위해 트랩됩니다. ( 제외하고 및 SIGINT
도 잡는 것이 좋을 것 같습니다 .)SIGHUP
SIGTERM
전체 시스템이 충돌할 가능성을 고려한다면 하나의 체크포인트 파일만 신뢰하지 않을 것입니다. 시스템이 파일 쓰기 시스템 호출에서 돌아올 때 데이터가 실제로 디스크에 있을 가능성은 거의 없습니다. 대신 운영 체제와 디스크 자체가 데이터를 캐시하고 나중에 실제로 쓸 수 있습니다. 따라서 이전 체크포인트를 하나 또는 두 개 유지하면 이러한 일이 발생하지 않도록 하는 안전 장치 역할을 할 수 있습니다.
답변2
신호 처리기를 사용하여 SIGINT
눌렀을 때 프로세스로 전송되는 신호를 캡처할 수 있습니다. Ctrl-C
그러면 프로세스가 즉시 종료되지 않고 신호 처리기가 호출됩니다. 그런 다음 결과를 신호 처리기의 파일에 쓸 수 있습니다. 이것이 일반적인 생각이며 실제로는 몇 가지 세부 사항에 주의를 기울여야 할 수도 있습니다.