कोड सी संकेत हैंडलर में काम नहीं कर रहा पहला:Printf (कम से कम मामले) विचाराधीन
#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)' – Saphrosit
का उपयोग करके stderr को फ्लश करने का प्रयास करें printf() et.al का उपयोग न करें। सिग्नल हैंडलर के अंदर। वे सिग्नल सुरक्षित नहीं हैं (उदाहरण: मॉलोक() को कॉल कर सकते हैं, जो सिग्नल-सुरक्षित नहीं है) – wildplasser
आश्चर्यजनक रूप से, मैंने शपथ ली थी कि मैंने पोस्ट करने से पहले 'fflush' के साथ एक संस्करण की कोशिश की थी। या तो कभी भी पुनः संकलित नहीं हुआ और भाग गया, या अनन्य पाश के साथ पैर में खुद को गोली मार दी, जिससे संदेश बंद हो गया। तो अनौपचारिक और गूंगा। – ntl0ve