मैं दूसरों को भूखा रखने से कैसे रोक सकता हूं?


10

स्पष्ट होने के लिए, मैं ऐसी किसी भी चीज़ के बारे में बात नहीं कर रहा हूँ जिसके लिए emacs को मल्टीथ्रेडेड होना चाहिए (हालाँकि वह भी इसे हल करेगा)। प्रजनन करना:

  1. emacs -Q # मैं 24.4.1 चला रहा हूं
  2. एक दूसरा फ्रेम बनाओ
  3. पहले फ्रेम पर वापस जाएँ
  4. एमएक्स खोल
  5. Mx का नाम बदला-विशिष्ट (हम बाद में एक दूसरा शेल बनाने जा रहे हैं)
  6. दौड़ना शुरू करो: while true; do echo "hello world"; done
  7. दूसरे फ्रेम में, एमएक्स शेल

दूसरा शेल लगभग कभी प्रदर्शित नहीं होगा (शायद ही बार-बार प्रयास करने के बाद भी यह काम करता है)। जाहिरा तौर पर emacs किसी भी अन्य प्रक्रिया से आने वाले आउटपुट को सुनने के लिए पहले शेल के आउटपुट को पढ़ने से कभी भी ब्रेक नहीं लेगा। लंबित आउटपुट के साथ कई प्रक्रियाएं होने पर रॉबिन को राउंड करना बेहतर होगा। क्या बेहतर व्यवहार पाने का कोई तरीका है?

एकमात्र चाल मुझे पता है कि शेल बफर को अपनी प्रक्रिया बनाने के लिए होगा, लेकिन दुर्भाग्य से यह मेरे लिए काम नहीं करेगा। यहां तक ​​कि अगर मैं ऐसा करता हूं, तो मुझे काम करने के लिए अपने भाषण मान्यता सॉफ़्टवेयर के लिए एक सॉकेट सुनने के लिए एक उपप्रकार चलाना होगा ताकि मैं वास्तव में पहली बार में शेल को नियंत्रित कर सकूं, इस तरह से मुझे यह पता चला; ऊपर की तरह एक अनंत लूप चलाना किसी भी डेटा को सॉकेट से बाहर ले जाने से रोकता है।


1
मेरे पास आपके प्रश्न का कोई विशिष्ट उत्तर नहीं है। हालाँकि, मैं start-processएक के साथ प्रयोग करना पसंद करता हूं set-process-filterऔर set-process-sentinel- इससे मैं अपने सामान्‍य तरीके से अन्य सामान कर रहा हूं, जबकि यह प्रक्रिया चलती है - मैं अपने आउटपुट को कभी-कभी *Messages*बफर का उपयोग करके भेजता हूं insertताकि मेरा इको एरिया अछूता रहे, या मैं उपयोग करूं एक समर्पित प्रक्रिया आउटपुट बफर (यदि आवश्यक हो)। उदाहरण के लिए, मैं एक लंबा rsyncसत्र चला सकता हूं । मेरे पास एक साथ कई / लंबा चलाने की कोशिश करने का कोई अनुभव नहीं है start-process, इसलिए मुझे यकीन नहीं है कि Emacs कैसे चल रहे हैं।
लॉस्ट

2
हम्म दिलचस्प लगता है। दोनों शेल अवर अलग-अलग प्रक्रियाएं हैं और जाहिर है एमएसीएस अभी भी मुद्दे के बिना अपने मुख्य कमांड लूप को संसाधित कर रहा है। हालाँकि, मुझे संदेह है कि जब यह घटिया एफडी का सर्वेक्षण करता है तो यह हमेशा पहले शेल पर कुछ पाता है और दूसरे एफडी को कभी संसाधित नहीं करता है। यदि आप पहले शेल में [1] मारते हैं तो दूसरा शेल वास्तव में आपकी अपेक्षा के अनुसार आता है। यह शायद देव मेलिंग सूची के लिए एक सवाल है।
stsquad

मुझे एक और समस्या है लेकिन यह फ्रेम के साथ स्मिलिर है
ReneFroger

जवाबों:


2

तो यह एक उचित समाधान नहीं है, लेकिन मैंने आपके परीक्षण को दूसरे तरीके (जैसे कि [1] दूसरे शेल पर) के आसपास चलाया) और यह ठीक काम करता है। अपने आस-पास के काम के रूप में आप यह सुनिश्चित कर सकते हैं कि किसी भी शैल बफ़र जो कि भारी आउटपुट उत्पन्न करने की संभावना रखते हैं, वे उन लोगों की तुलना में बाद में बनाए जाते हैं जहाँ आप अन्तरक्रियाशीलता चाहते हैं। इस तरह से इंटरैक्टिव गोले सबसे पहले Emacs के अवर पोल द्वारा नियंत्रित किए जाते हैं, जो कि बहुत सारे आउटपुट उत्पन्न करने से पहले संभालते हैं।

व्यवहार में यदि आप इंटरेक्टिव शेल का चयन कर रहे हैं, तो आप संभवतः ऐसी स्थिति में नहीं होंगे जहां कोई आई / ओ को इतने लंबे समय तक टिकाए रखता है। अगर आपको नियमित रूप से ऐसी चीज की जरूरत है तो शायद आउटपुट को फाइल में रीडायरेक्ट करना और व्यू मोड का उपयोग करना बेहतर उपाय है?


1
यहां मुद्दा यह है कि दुर्घटना से अनंत लूप लिखना मुश्किल नहीं है। मैं यह भी सोचना पसंद नहीं करूँगा कि कमांड चलाने के दौरान I / OI की कितनी योजना है। Emacs का उपयोग करने का पूरा लाभ यह है कि सब कुछ पहले से ही एक अच्छा बचा-सक्षम बफर में है :)
जोसेफ गार्विन

1
@ जोसेफगर्विन की मैं सराहना करता हूं। मुझे लगता है कि सबसे अच्छा समाधान अगर आपके उत्कृष्ट प्रजननकर्ता के साथ एमएक्स रिपोर्ट-बग है।
stsquad
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.