나는 충돌없이 실행해야하는 데몬 유틸리티가 있습니다. 신호를 등록하고 SIGKILL을 제외한 모든 신호를 건너 뛸 수 있다는 것을 알고 있습니다.C++의 크래시 처리기
내 데몬이 멀티 스레드이고 스레드에있는 일부 코드로 인해 SIGABRT 신호가 발생했는지 알고 싶습니다. 스레드 종료가됩니까? 또는 SIGABRT 신호를 건너 뛰면 해당 스레드가 계속 실행됩니다 ..?
의 그것을 종료하지 않는 경우
*** error for object 0x101800068: incorrect checksum for freed object - object was probably modified after being freed.
내가, 내 스레드 프로그램을 계속 실행 가능하고 어떤 문제를 만들 것입니다 내 응용 프로그램이 마지막으로이 오류로 인해 추락 가정 해 봅시다 ..?
아무리해도 내 응용 프로그램을 계속 실행하고 싶습니다. 프로세스 재시작과 같은 오류로부터 응용 프로그램을 복구하고 싶습니다. 내가 충돌 신호 동안 내 main()을 제외한 모든 스레드를 종료하고 모든 스레드를 다시 시작할 수 있다면 더 좋을 것입니다. 하지만 내가 아는 한, 스레드가 신호 중에 종료되지 않습니다. 이 신호들 중에 모든 스레드를 종료 할 수 있도록 어떻게 다시 시작할 수 있습니까?
이러한 신호를 유발하는 몇 가지 문제점은 실제로 좋지 않으며 복구 할 수 없다는 것을 알고 계십니까? –
@JoachimPileborg 우리는 C++ 예외 처리가 너무 느리기 때문에 이러한 신호가 실제로 복구 할 수없는 문제를 야기하지는 않을뿐만 아니라 예외적으로 (예외는 아니지만) 전형적인 것이기 때문에 복구 불가능 (문서 확인) – IdeaHat
@ JoachimPileborg에 완전히 동의합니다. 추가 [가정에 포인트를 운전] (http://akrzemi1.wordpress.com/2011/10/05/using-stdterminate/ "http://akrzemi1.wordpress.com/2011/10/05/using-stdterminate/ ") :"* ... [T] 여기에는 세계에서 "무엇을 하든지 상관없이"실행하는 것이 주 목적 인 프로그램이 없습니다. 프로그램은 유용한 것을해야하며, 예외적 인 경우에 의해 예방되는 경우, 프로그램 유용하지 않은 (또는 유해한 일을하는) 일을하지 않는 것은 누구에게나 필요하지 않습니다. * " – Lilshieste