एक "सबप्रिपर" प्रक्रिया क्या है?


38

"उपप्रकार" शब्द का उपयोग कुछ उत्तरों में किया जाता है। Google की खोज में प्रविष्टियाँ भी बदल जाती हैं जहाँ शब्द "बस उपयोग किया जाता है"।

मैं कैसे समझ सकता हूं कि एक "सबप्रिपर" क्या है?


3
मैंने पहले कभी शब्द नहीं सुना। क्या आप संदर्भ के लिए कुछ संदर्भ शामिल कर सकते हैं?
सेलडा

5
यहाँ एक है: मैंने इसका उपयोग unix.stackexchange.com/a/177361/5132 पर एक उत्तर में किया
JdeBP

संबंधित सवाल है कि शायद मैं यहाँ के बजाय पर serverfault तैनात किया जाना चाहिए था serverfault.com/questions/747070/...
artfulrobot

जवाबों:


49

सिस्टम कॉल prctl () के झंडे के रूप में इसे लिनक्स कर्नेल 3.4 पर लागू किया गया था ।

से prctl(2)मैनपेज:

[...] एक उपप्रवासी init(1)अपने वंशज प्रक्रियाओं के लिए भूमिका को पूरा करता है। अनाथ हो जाने वाली प्रक्रिया (अर्थात, उसके तत्काल माता-पिता को पहले ही समाप्त कर दिया गया है) की समाप्ति पर और एक उप-सहायक के रूप में चिह्नित किया गया है, निकटतम अभी भी रहने वाले पूर्वज उपप्रवासी को एक SIGCHLDसंकेत प्राप्त होगा और wait(2)अपनी समाप्ति स्थिति की खोज करने की प्रक्रिया में सक्षम होगा ।

एक प्रक्रिया अपने आप को एक उप-सहायक के रूप में परिभाषित कर सकती है prctl(PR_SET_CHILD_SUBREAPER)। यदि ऐसा है, तो यह init(पीआईडी ​​1) नहीं है जो अनाथ बच्चे की प्रक्रियाओं का माता-पिता बन जाएगा , इसके बजाय निकटतम जीवित दादा-दादी जो कि उप-सहायक के रूप में चिह्नित हैं, नए माता-पिता बन जाएंगे। अगर कोई जीवित दादा-दादी नहीं है, initतो।

इस तंत्र को लागू करने के कारण यह है कि यूज़रस्पेस सेवा प्रबंधकों / पर्यवेक्षकों (की तरह था upstart, systemd) अपने शुरू कर दिया सेवाओं पर नज़र रखने की जरूरत है। कई सेवाएं डबल-फोर्किंग के माध्यम से निष्क्रिय हो जाती हैं और पीआईडी ​​1 को फिर से समरूप हो जाती हैं । सेवा प्रबंधक अब SIGCHLDउनके लिए सिग्नल प्राप्त नहीं कर पाएगा , और अब बच्चों के साथ फिर से काम करने के लिए प्रभारी नहीं है wait()। बच्चों के बारे में सभी जानकारी पल में खो जाती है पीआईडी ​​1 फिर से परेड प्रक्रियाओं को साफ करता है। अब, एक सेवा प्रबंधक प्रक्रिया खुद को "उप-इनिट" के रूप में चिह्नित कर सकती है, और अब शुरू की गई सेवाओं द्वारा बनाई गई सभी अनाथ प्रक्रियाओं के लिए माता-पिता के रूप में रहने में सक्षम है। सभी SIGCHLDसिग्नल सेवा प्रबंधक को दिए जाएंगे।

लिनक्स में, एक डेमॉन आमतौर पर दो बार पोते के जाने के बाद बाहर निकलने वाली मध्यवर्ती प्रक्रिया के साथ फोर्क करके बनाया जाता है । ज़ोंबी प्रक्रियाओं से बचने के लिए यह एक सामान्य तकनीक है । Init स्क्रिप्ट एक बच्चे को बुलाती है। वह बच्चा फिर से जन्म लेता है और इस तरह तुरंत बाहर निकल जाता है। पोते द्वारा गोद लिया जाएगा init, जो लगातार wait()लाश से बचने के लिए अपने बच्चों की निकास स्थिति को इकट्ठा करने के लिए कहता है। सबरेपर्स की अवधारणा के साथ, यूजरस्पेस सेवा प्रबंधक अब इसके बजाय नए अभिभावक बन गए हैं init


तो, क्या मैं सोच सकता हूं कि प्रक्रिया "उप" -प्रोसेस को "रीप" करती है? या, प्रक्रिया एक "उप" रीपर है क्योंकि "मुख्य" रीपर इनिट है? बस यह सोचने की कोशिश कर रहा था कि यह शब्द कैसे गढ़ा गया था। जवाब के लिए धन्यवाद!
केंकेजी

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