स्पष्ट होने के लिए, मैं ऐसी किसी भी चीज़ के बारे में बात नहीं कर रहा हूँ जिसके लिए emacs को मल्टीथ्रेडेड होना चाहिए (हालाँकि वह भी इसे हल करेगा)। प्रजनन करना:
- emacs -Q # मैं 24.4.1 चला रहा हूं
- एक दूसरा फ्रेम बनाओ
- पहले फ्रेम पर वापस जाएँ
- एमएक्स खोल
- Mx का नाम बदला-विशिष्ट (हम बाद में एक दूसरा शेल बनाने जा रहे हैं)
- दौड़ना शुरू करो:
while true; do echo "hello world"; done
- दूसरे फ्रेम में, एमएक्स शेल
दूसरा शेल लगभग कभी प्रदर्शित नहीं होगा (शायद ही बार-बार प्रयास करने के बाद भी यह काम करता है)। जाहिरा तौर पर emacs किसी भी अन्य प्रक्रिया से आने वाले आउटपुट को सुनने के लिए पहले शेल के आउटपुट को पढ़ने से कभी भी ब्रेक नहीं लेगा। लंबित आउटपुट के साथ कई प्रक्रियाएं होने पर रॉबिन को राउंड करना बेहतर होगा। क्या बेहतर व्यवहार पाने का कोई तरीका है?
एकमात्र चाल मुझे पता है कि शेल बफर को अपनी प्रक्रिया बनाने के लिए होगा, लेकिन दुर्भाग्य से यह मेरे लिए काम नहीं करेगा। यहां तक कि अगर मैं ऐसा करता हूं, तो मुझे काम करने के लिए अपने भाषण मान्यता सॉफ़्टवेयर के लिए एक सॉकेट सुनने के लिए एक उपप्रकार चलाना होगा ताकि मैं वास्तव में पहली बार में शेल को नियंत्रित कर सकूं, इस तरह से मुझे यह पता चला; ऊपर की तरह एक अनंत लूप चलाना किसी भी डेटा को सॉकेट से बाहर ले जाने से रोकता है।
start-process
एक के साथ प्रयोग करना पसंद करता हूंset-process-filter
औरset-process-sentinel
- इससे मैं अपने सामान्य तरीके से अन्य सामान कर रहा हूं, जबकि यह प्रक्रिया चलती है - मैं अपने आउटपुट को कभी-कभी*Messages*
बफर का उपयोग करके भेजता हूंinsert
ताकि मेरा इको एरिया अछूता रहे, या मैं उपयोग करूं एक समर्पित प्रक्रिया आउटपुट बफर (यदि आवश्यक हो)। उदाहरण के लिए, मैं एक लंबाrsync
सत्र चला सकता हूं । मेरे पास एक साथ कई / लंबा चलाने की कोशिश करने का कोई अनुभव नहीं हैstart-process
, इसलिए मुझे यकीन नहीं है कि Emacs कैसे चल रहे हैं।