내 Linux 응용 프로그램에서 SIGSEGV를 처리해야합니다. 그 이유는 코어 - 덤프를 생성하기 전에 일부 정리 (3-partry lib)가 완료되어야하기 때문입니다. 게다가, 정리는 스레드를 호출하는 컨텍스트에서 수행해야하며, 신호 처리기에서는 수행 할 수 없습니다. 그래서 신호 처리기에서 호출 스레드에 컨트롤을 전달하고, 정리가 끝난 후 raise (SIGSEGV)를 사용하여 코어 덤프를 생성합니다.Linux에서 SIGSEGV를 처리 하시겠습니까?
실제 문제는 signal_handler가 post_sem이나 다른 것을 사용하더라도 상관없이 호출 스레드에 컨트롤을 전달할 수없는 것 같습니다. 이 케이스를 처리 할 생각이 있으십니까? SIGSEGV를 납치 할 가능성이 있으며, SIGSEGV 처리기에서 다른 스레드로 복귀하여 정리를 수행 할 수 있습니까?
신호 (SIGSEGV, signal_handler);
signal_handler() { ... post_sem(); ...}
호출 스레드() { wait_sem(); clean_up(); ... }
설명하신 방법은 사실 가장 가까운 것입니다. 'sem_post' (POSIX 버전)는 표준에 의해 비동기 신호에 안전해야합니다. –