Кажется, это трудно определить, так как вы не знаете, какую случайную небезопасную функцию может решить вызвать библиотечная подпрограмма. Список также может отличаться в разных версиях glibc или в другой Unix-подобной системе. Похоже, вам придется проанализировать множество стеков вызовов, чтобы найти ответ, и даже это может быть немного шатким от версии к версии, от дистрибутива к дистрибутиву.
Возможно, вы не ищете альтернативных подходов к проектированию, но кажется, что лучшая стратегия была бы такой: если ваша программа имеет цикл обработки событий, сделайте обработчик сигналов очень глупым и просто установите какое-то состояние, которое будет обрабатывать цикл событий. Таким образом, вы выполняете значимую работу вне обработчика сигнала.
Пример: Допустим, у вас где-то есть цикл poll()
. Возможно, вы могли бы включить канал, в который обработчик сигнала может записывать. Затем цикл poll()
выполняет некоторую нетривиальную работу, основываясь на том, что ему сигнализирует об этом.