Сначала рассматриваемый код (минимизированный случай):
#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
не происходит.
Почему это так? В какой среде / контексте выполняется код обработчика? Где я могу прочитать об этом?