그것의 요점은 다음과 같습니다
- 당신은 프로그램이 계속 실행하고 걸려 있지 않은 경우 감지해야합니다.
- 프로그램이 실행 중이 아니거나 중단 된 경우 프로그램을 다시 시작해야합니다.
은 여러 가지 방법으로는 # 1을 할 수 있습니다,하지만 마음에 와서 두 사람은 다음과 같습니다
상태 요청을 처리하기 위해, 유닉스 도메인 소켓에 듣기. 그러면 외부 응용 프로그램이 응용 프로그램이 여전히 괜찮은지 여부를 묻습니다. 일부 제한 시간 내에 아무런 응답이 없으면 쿼리되는 응용 프로그램이 교착 상태에 있거나 죽었다고 가정 할 수 있습니다.
미리 선택된 경로로 파일을 주기적으로 만지십시오. 외부 응용 프로그램은 파일에 대한 시간 소인을 볼 수 있으며 부적절한 경우 appliation이 dead 또는 deadlock으로 간주 할 수 있습니다.
# 2와 관련하여 이전 PID를 강제 종료하고 fork + exec를 사용하여 새 프로세스를 시작하는 것이 일반적입니다. 한 번 실행되는 응용 프로그램에 "지속적으로"실행되는 응용 프로그램을 작성한 다음 "cron"또는 다른 응용 프로그램을 사용하여 해당 단일 실행 응용 프로그램을 계속 다시 실행하는 것도 고려할 수 있습니다.
불행히도 워치 독 타이머와 교착 상태가 발생하는 것은 드문 경우입니다. 나는 그것을 할 수있는 일반적인 방법을 모른다. 그리고 내가 보아온 몇 가지는 꽤 못생긴 것이지 100 % 버그가 없다. 그러나 tsan은 정적 분석을 통해 잠재적 인 교착 상태 시나리오 및 기타 스레딩 문제를 감지하는 데 도움이 될 수 있습니다.
어떤을 시작하기 위해 다른에
/etc/init.d/
에이 스크립트를 넣을 수 있습니다 응용 프로그램 실행이 스크립트? – user623879많은 임베디드 플랫폼에서 워치 독이 죽지 않도록 보장하여 워치 독 데몬이 하드웨어 워치 독을 일으킬 수 있습니다. – Hasturkun
"한 번만 실행되도록 응용 프로그램을 조정 한 다음 해당 단일 스레드를 다시 실행합니다. 반복적으로 응용 프로그램을 실행하십시오. " 이것이 가능하다면 탐지 과정이 상당히 단순해질 것입니다. –