J'ai besoin de gérer le SIGSEGV dans mon application Linux. La raison en est que le nettoyage (3-partry lib) doit être fait avant de générer core-dump. Qui plus est, le nettoyage doit être effectué dans le contexte d'un thread appelant, impossible à faire dans le gestionnaire de signal. Donc, je prévois dans le gestionnaire de signal de passer le contrôle au thread appelant, une fois le nettoyage terminé, puis utilisez raise (SIGSEGV) pour générer le core-dump.gérer SIGSEGV sous Linux?
Le vrai problème semble que le signal_handler ne peut pas passer le contrôle à un thread appelant, peu importe que j'utilise post_sem ou d'autres. Une idée pour gérer ce cas? Peut-on détourner le SIGSEGV, puis dans SIGSEGV, le hander revient à un autre thread pour effectuer un nettoyage?
signal (SIGSEGV, signal_handler);
signal_handler() { ... post_sem(); ...}
thread appelant() { de wait_sem(); clean_up(); ...}
La méthode que vous avez décrite est en réalité la chose la plus proche de valide. 'sem_post' (la version POSIX) est requis par le standard pour être sans danger pour le signal asynchrone. –