코드를 작동하지 않습니다 : 내가 코드를 실행의 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
은 발생하지 않습니다.
왜 이렇게됩니까? 핸들러 코드는 어떤 환경/컨텍스트에서 실행됩니까? 이 부분을 어디에서 읽을 수 있습니까?
'fflush (stderr)'를 사용하여 stderr을 비우십시오. – Saphrosit
printf() 등을 사용하지 마십시오. 내부 신호 처리기. 그들은 신호 안전하지 않습니다. (예 : malloc()은 신호 안전하지 않습니다.) – wildplasser
놀랍게도, 게시하기 전에 'fflush'를 사용하여 변형 된 것을 시도해 보았습니다. 다시 컴파일하거나 실행하거나 화면에서 메시지를 이동하는 무한 루프로 다리에서 자신을 쏜 적이 없습니다. 그래서 무언가와 바보. – ntl0ve