जवाबों:
यह देखते हुए कि कैसे linux जॉब्स और प्रोसेस ओनरशिप काम करता है, मुझे डर है कि प्रक्रिया को फिर से अपनाए बिना, प्रक्रिया को अपनाने में मदद के बिना वास्तव में संभव नहीं है।
एक अभिभावक बच्चे को 'डिसाइड' कर सकता है, जिसे 'इनिट' नाम की प्रक्रिया द्वारा 'अपनाया' जाता है। सिस्टम सुरक्षा किसी को किसी और की प्रक्रियाओं को हथियाने से रोकती है। जब आप इसे भंग कर देते हैं, तो एक प्रक्रिया किसी और (init) को नियंत्रित करने के लिए बन जाती है। आप 'उपयोगकर्ता' के रूप में अभी भी इस प्रक्रिया को मार सकते हैं, लेकिन आप इसे वापस नहीं पा सकते। आपकी प्रक्रिया को वापस करने के लिए init के लिए प्रयास करने का प्रयास करने की संभावना नहीं है, क्योंकि init मेल भी नहीं पढ़ता है।
जैसा कि यह लगता है, यह वास्तव में "ऐसा मत करो!" के जवाब को उबालता है।
reptyr
(एक उपयोग उदाहरण के लिए मेरा उत्तर देखें)।
हालांकि मुझे लगता है कि यह किसी को भी गलत प्रक्रिया को अस्वीकार करने की दुर्भाग्यपूर्ण स्थिति में मदद नहीं करता है, अगर आप अपने वर्कफ़्लो से डिस्क्राइब करने वाले थे और इसे बदल दें:
https://github.com/nelhage/reptyr
आप किसी भी प्रक्रिया को पुन: लागू करने में सक्षम होंगे (यानी इसे स्क्रीन के अंदर ले जाएं)।
reptyr
समाधान है, लेकिन इसका उपयोग बंद करने की कोई आवश्यकता नहीं है disown
। स्पष्टता के लिए, मैंने एक नया उत्तर लिखा है।
आप सभी की जरूरत है reptyr
। यह GitHub पर रहता है और व्हीज़े के बाद से डेबियन के लिए पैक किया गया है, और शायद अन्य GNU / लिनक्स डिस्ट्रोस के लिए भी। यदि आप इसकी प्रक्रिया आईडी (PID) के साथ इसे लागू करते हैं, तो यह वर्तमान टर्मिनल में आपकी विहित प्रक्रिया को आगे बढ़ा देगा। उदाहरण के लिए:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
नहीं, माफ करिए। सिद्धांत रूप में, यह संभव होगा, क्योंकि केवल कुछ शेल आंतरिक स्थिति को बदलने से - यह मूल रूप से एक सूची से प्रक्रिया आईडी को हटा देता है, और इसे बहुत अधिक परेशानी के बिना वापस रखा जा सकता है (आपको परीक्षण में थोड़ा सावधान रहना होगा कि reattached pid सही सत्र में है, लेकिन यह अचूक नहीं है)। लेकिन कोई भी सामान्य शेल (बैश, ksh, tsh, zsh) फिर से जोड़ने का एक तरीका नहीं है। (हालांकि zsh के साथ आप लिख सकते हैं jobstates
, jobdirs
और jobtext
साहचर्य सरणियों; मुझे नहीं पता कि आप उस तरीके को कितना प्राप्त कर सकते हैं)
यदि आप चाहते हैं कि शेल अपने स्वामित्व वाली उपप्रजातियों के लिए किए जाने वाले प्रकटीकरण के लिए सिग्नल भेजे, तो आप एक स्टब जॉब लिख सकते हैं, जो तब तक इंतजार करता है जब तक कि वह सिग्नल प्राप्त नहीं कर लेता है और वही प्रक्रिया को सिग्नल भेज देता है। आप भेज सकते हैं SIGSTOP
और SIGCONT
अनुकरण करने के लिए त्याग की प्रक्रिया के लिए Ctrl+ Zऔर bg
। इसमें से कोई भी फिर से मालिक के रूप में काफी सुविधाजनक नहीं होगा।
क्या हालात हैं? यदि आप अपने टर्मिनल को कुछ समय के लिए वापस लेना चाहते हैं, तो आप इसके बजाय GNU स्क्रीन का उपयोग कर सकते हैं । यह टर्मिनल से प्रक्रिया को बहुत अलग नहीं करता है - स्क्रीन प्रक्रिया के लाभ के लिए एक का अनुकरण करता है - लेकिन आप इसे उस वास्तविक टर्मिनल से संलग्न और अलग कर सकते हैं जिसका आप उपयोग कर रहे हैं। आप एक स्क्रीन को अलग भी कर सकते हैं, लॉग आउट कर सकते हैं, फिर उसी स्क्रीन पर वापस लॉग इन और पुनः संलग्न कर सकते हैं।