मैं लिनक्स में सिग्नल का अध्ययन कर रहा हूं। और मैंने सिगिनट को पकड़ने के लिए एक टेस्ट प्रोग्राम किया है।क्यों लिनक्स हमेशा Ctrl + C दबाकर "^ सी" आउटपुट करता है?
#include <unistd.h>
#include <signal.h>
#include <iostream>
void signal_handler(int signal_no);
int main() {
signal(SIGINT, signal_handler);
for (int i = 0; i < 10; ++i) {
std::cout << "I'm sleeping..." << std::endl;
unsigned int one_ms = 1000;
usleep(200* one_ms);
}
return 0;
}
void signal_handler(int signal_no) {
if (signal_no == SIGINT)
std::cout << "Oops, you pressed Ctrl+C!\n";
return;
}
उत्पादन इस तरह दिखता है जबकि:
I'm sleeping...
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
I'm sleeping...
I'm sleeping...
मैं समझता हूँ कि जब Ctrl + C दबाने, अग्रभूमि प्रक्रिया समूह के सभी एक SIGINT प्राप्त करता है (कोई प्रक्रिया इसे अनदेखा करने के लिए चुनता है, तो) में संसाधित करता है।
तो क्या यह है कि खोल (बैश) और उपरोक्त कार्यक्रम के उदाहरण दोनों को सिग्नल प्राप्त हुआ? प्रत्येक "ओप्स" से पहले "^ सी" कहां से आता है?
ओएस सेंटोस है, और खोल बैश है।
मजेदार बात यह है कि दूसरा उत्तर (जो सादा गलत है) अभी भी अपवॉट हो जाता है, क्योंकि इसमें सही पुस्तकें के लिंक शामिल हैं। – wildplasser
@WiSaGaN वही उत्तर "लगभग सही" (मुझे टिप्पणी करें) और "सादा गलत" (ओपी को टिप्पणी) कैसे हो सकता है। ** बेशक ** परिधीय के माध्यम से सिस्टम के साथ संचार करते समय डिवाइस ड्राइवर शामिल होते हैं (आप कीबोर्ड ड्राइवर का उल्लेख कैसे नहीं करते?) अधिक जानकारी प्रदान करने से "लगभग सही" उत्तर "सादा गलत" नहीं होता है। अगर मैं मशीन भाषा और लुकअप टेबल के स्तर पर गया, तो क्या यह आपके उत्तर को गलत बना देगा? मुश्किल से। मैंने पुस्तकों के लिंक प्रदान किए ताकि ओपी आवश्यकतानुसार अधिक विवरण देख सके। ओपी महसूस किया कि मेरा जवाब सहायक था। आपकी वर्तमान टिप्पणी सबसे अच्छा विरोधाभासी और अपमानजनक है। – Levon
गलत बात यह है कि * खोल शामिल नहीं है *।^सी से आईएनटीआर का रूपांतरण टर्मिनल ड्राइवर में होता है। खोल केवल एक रिसेप्टर है (किसी भी अन्य प्रक्रिया की तरह) stty शैल को लक्षित नहीं कर रहा है, लेकिन tty। – wildplasser