Рассмотрим следующую программу:
#define _POSIX_C_SOURCE 200809L
#include <time.h>
#include <pthread.h>
#include <signal.h>
void timerfunc(union sigval val) { }
int main()
{
struct sigevent sev = { .sigev_notify = SIGEV_THREAD,
.sigev_notify_function = timerfunc };
timer_t t;
timer_create(CLOCK_REALTIME, &sev, &t);
timer_delete(t);
pthread_exit(0);
}
Связанный с glibc, он не только не завершается, но и не может быть уничтожен, кроме как kill -9
/ SIGKILL
.Это поведение разрешено стандартом?Есть ли хорошие обходные пути, кроме как всегда явно выходить из процесса (в отличие от простого выхода из всех потоков)?