यूनिक्स में सत्र और प्रक्रिया समूह का उपयोग और अर्थ?


83

यूनिक्स प्रक्रियाओं में एक सत्र आईडी होता है और यह एक प्रक्रिया समूह का हिस्सा होता है - जिसे सेटिस्ड () / getpgrp () जैसे कार्यों के साथ बदला जा सकता है।

हालाँकि, एक प्रक्रिया समूह और सत्र की अवधारणा ने मुझे हमेशा के लिए अलग कर दिया, क्या कोई समझा सकता है कि अलग-अलग सत्र और प्रक्रिया समूह प्रदान करने का क्या महत्व है - क्यों / कब कोई एक नया सत्र बनाना चाहता है या एक ही सत्र में कई प्रक्रियाएँ और / या प्रक्रिया समूह रखता है ?

जवाबों:


104

एक प्रक्रिया समूह संबंधित प्रक्रियाओं का एक संग्रह है जिसे सभी को एक ही बार में संकेत दिया जा सकता है।

एक सत्र प्रक्रिया समूहों का एक संग्रह है, जो या तो एकल टर्मिनल डिवाइस से जुड़ा होता है (जिसे कंट्रोलिंग टर्मिनल के रूप में जाना जाता है ) या किसी भी टर्मिनल से जुड़ा नहीं होता है।

सत्र का उपयोग नौकरी नियंत्रण के लिए किया जाता है: सत्र में प्रक्रिया समूहों में से एक अग्रभूमि प्रक्रिया समूह है, और टर्मिनल नियंत्रण वर्णों द्वारा संकेत भेजे जा सकते हैं। आप उस टर्मिनल पर "लॉगिन" के अनुरूप कंट्रोलिंग टर्मिनल के साथ एक सत्र के बारे में सोच सकते हैं। (डेमॉन आम तौर पर एक के बिना एक नया सत्र बनाकर किसी भी नियंत्रित टर्मिनल से खुद को अलग कर लेते हैं।)

उदाहरण के लिए, यदि आप some_appशेल से चलते हैं, तो शेल इसके लिए एक नया प्रोसेस ग्रुप बनाता है, और सत्र के अग्रभूमि प्रक्रिया समूह को बनाता है। ( some_appकुछ बच्चे प्रक्रियाएँ बना सकते हैं; डिफ़ॉल्ट रूप से वे उसी प्रक्रिया समूह का हिस्सा होंगे।) यदि आप फिर दबाते हैं ^Z, तो some_appप्रक्रिया समूह को इसे रोकने के लिए संकेत दिया जाता है; और शेल की प्रक्रिया समूह को अग्रभूमि प्रक्रिया समूह के रूप में बदल दिया जाता है। फिर जैसे फिर से प्रक्रिया समूह bg %1शुरू होगा some_app, लेकिन यह पृष्ठभूमि में चल रहा है।


POSIX.1-2008 मानक काफी पठनीय है (कम से कम, मुझे ऐसा लगता है!) - पर एक नज़र डालें परिभाषाएँ और के प्रासंगिक अनुभाग "जनरल टर्मिनल इंटरफेस" अध्याय।


3
अतिरिक्त जानकारी के साथ यह एक बहुत अच्छी व्याख्या है जो बाद में सवालों के रूप में पॉप-अप हो सकता है
GP92

@MatthewSlatter दस्तावेज़ में एक ही चीज़ का उल्लेख terminalऔर terminal deviceउल्लेख किया गया है?
अल्लाल

12

नौकरी नियंत्रण गोले हर समय सत्र या प्रक्रिया समूहों में हेरफेर करते हैं। आप POSIX kill()फ़ंक्शन के लिए एकल कॉल के साथ प्रक्रिया समूह में सभी प्रक्रियाओं को एक ही संकेत भेज सकते हैं ।

POSIX मानक कहता है:

यदि पीआईडी ​​0 से अधिक है, तो उस प्रक्रिया को भेजा जाएगा जिसकी प्रक्रिया आईडी पीआईडी ​​के बराबर है।

यदि पीआईडी ​​0 है, तो सभी प्रक्रियाओं (सिस्टम प्रक्रियाओं के अनिर्दिष्ट सेट को छोड़कर) के लिए सिग भेजा जाएगा, जिसकी प्रक्रिया समूह आईडी प्रेषक की प्रक्रिया समूह आईडी के बराबर है, और जिसके लिए प्रक्रिया को सिग्नल भेजने की अनुमति है।

यदि पीआईडी ​​-1 है, तो सिग को सभी प्रक्रियाओं (सिस्टम प्रक्रियाओं के अनिर्दिष्ट सेट को छोड़कर) के लिए भेजा जाएगा जिसके लिए प्रक्रिया को उस सिग्नल को भेजने की अनुमति है।

यदि पीआईडी ​​ऋणात्मक है, लेकिन -1 नहीं, सिग को सभी प्रक्रियाओं (सिस्टम प्रक्रियाओं के अनिर्दिष्ट सेट को छोड़कर) के लिए भेजा जाएगा जिसकी प्रक्रिया समूह आईडी पीआईडी ​​के निरपेक्ष मूल्य के बराबर है, और जिसके लिए प्रक्रिया को सिग्नल भेजने की अनुमति है ।

जब एक लॉगिन शेल बाहर निकलता है, उदाहरण के लिए, उसके प्रक्रिया समूह के सभी कार्यक्रमों के लिए एक SIGHUP संकेत भेजा जाता है।

जब आप प्रोग्राम को अग्रभूमि या पृष्ठभूमि में हेरफेर करते हैं, तो आप प्रक्रिया समूहों का उपयोग कर रहे हैं।

चिंता करने के लिए नियंत्रित करने वाले टर्मिनल भी हैं; एक नियंत्रण समूह द्वारा उत्पन्न संकेतों को एक प्रक्रिया समूह में सभी कार्यक्रमों के लिए भेजा जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.