Printf не работает в обработчике сигналов C

Сначала рассматриваемый код (минимизированный случай):

#include <stdio.h>
#include <signal.h>

int counter = 0;

void react_to_signal(int n) {
    fprintf(stderr, "Caught!\n");
    counter++;
}

int main(int argc, char** argv) {

    signal(SIGINFO, react_to_signal);

    while (1) {
        printf("%d\n", counter);
    }

    return 0;
}

Я запускаю код, он зацикливается, как должен, выводя 0. Затем в другой оболочке ..

kill -s SIGINFO <pid_of_my_process>

Сигнал доставляется, c увеличивается .. но fprintf не происходит.

Почему это так? В какой среде / контексте выполняется код обработчика? Где я могу прочитать об этом?

5
задан Coren 14 March 2012 в 08:53
поделиться