दबाने Cजबकि Ctrlदबाया जाता है एक कुंजी दबाने टर्मिनल एमुलेटर को keyrelease X11 घटना के बाद भेजता है।
उस घटना पर (आमतौर पर कीप वन), टर्मिनल एम्यूलेटर 0x3 बाइट ( ^C
) को उसकी फाइल डिस्क्रिप्टर पर छद्म-ट्टी डिवाइस के मास्टर साइड पर लिखता है।
यदि isig
डिवाइस की टर्मिनस सेटिंग चालू है और यदि intr
सेटिंग उस 0x3 बाइट पर सेट है, तो कर्नेल टर्मिनल डिवाइस के अग्रभूमि प्रक्रिया समूह के सभी सदस्यों (अन्य विशेषता जो पीटीआई डिवाइस में संग्रहीत है) को SIGINT सिग्नल भेजता है । उस स्थिति में, 0x3 बाइट पेंटी के गुलाम पक्ष पर पढ़ने के लिए उपलब्ध नहीं होगी।
यह आम तौर पर इंटरैक्टिव गोले हैं जो setpgid()
शेल नौकरियों के लिए प्रक्रिया समूह (के साथ ) बनाते हैं , और यह तय करते हैं कि किसको अग्रभूमि में रखा जाए ( tcsetpgrp()
पीटीआई डिवाइस की उस विशेषता को सेट करने के लिए) या नहीं।
उदाहरण के लिए, जब आप एक इंटरैक्टिव शेल के संकेत पर चलते हैं:
foo | bar
खोल दो प्रक्रियाओं के साथ एक नया प्रक्रिया समूह शुरू करता है (जिसमें यह निष्पादित होता है foo
और bar
एक पाइप के साथ उनकी स्टड / आउट जुड़ा होने के बाद) और उस समूह को अग्रभूमि में रखता है। यदि आप Ctrl-C दबाते हैं, तो दोनों प्रक्रियाएँ SIGINT प्राप्त करेंगी।
में:
foo | bar &
समान लेकिन प्रक्रिया समूह को अग्रभूमि में नहीं रखा गया है (और शेल भी इसके लिए इंतजार नहीं करता है ताकि आप अन्य कमांड में प्रवेश कर सकें)। उन प्रक्रियाओं को Ctrl-C पर SIGINT नहीं मिलेगा, लेकिन अगर उन्हें ट्टी डिवाइस से पढ़ने की कोशिश की जाती है, तो उन्हें निलंबित किया जा सकता है।
पर अधिक पढ़ने: प्रत्येक छद्म टर्मिनल (PTY) घटक (सॉफ्टवेयर, मास्टर साइड, दास पक्ष) की जिम्मेदारियां क्या हैं?