क्या टर्मिनल पर आउटपुट के बहुत सारे पाठ को रोकने के लिए कोई रास्ता नहीं है?


38

Xterm के अंदर एक tmux सेशन में जब कोई प्रोग्राम बहुत समय के लिए ( cat very_long_fileपूरे सत्र की तरह जमे हुए) थोड़ी देर के लिए उत्पन्न होता है । यहां तक ​​कि अगर मैं Ctrl-C दबाता हूं तो कुछ भी बाधित नहीं होता है। संभवत: क्योंकि tmux जमी है और यह Ctrl-C को आगे बढ़ा रहा है। प्रोग्राम आउटपुट को उत्पन्न करता है। क्या इसे रोकने का कोई तरीका है।


समस्या यह है कि कार्यक्रम ने अपने आउटपुट को मानक से बहुत तेजी से लिखा है जितना कि आपके टर्मिनल इसे प्रदर्शित कर सकते हैं। जब आप Ctrl-C मारते हैं, तो प्रक्रिया वास्तव में मार दी जाती है, लेकिन आपका टर्मिनल बफ़र किए गए आउटपुट को प्रिंट करना जारी रखता है।
चेपनर

1
क्षैतिज रूप से विभाजित tmux panes (यानी Cb%) पूर्ण फलक या लंबवत रूप से विभाजित पट्टियों की तुलना में इस समस्या के लिए अधिक संवेदनशील है। इसके अलावा, Cb d और reattaching चलाने से प्रोग्राम अस्थायी रूप से "अनफ्रीज" हो जाएगा, हालांकि केवल अस्थायी रूप से। जब तक आप tmux कॉन्फ़िगरेशन में खुदाई करने के लिए तैयार नहीं हैं तब तक वास्तव में कोई समाधान नहीं है।
रसेल स्टुअर्ट

जवाबों:


15

सही समाधान c0- * विकल्पों को देखने और आउटपुट को सीमित करने की कोशिश करने के लिए है। यह समस्या सभी पर मौजूद होने के कारण टर्मिनल में भेजे जाने वाले डेटा की तुलना में इसे तेजी से प्रदर्शित किया जा सकता है, इसलिए रेट-लिमिटिंग एकमात्र तरीका है।


c0-change-ट्रिगर और c0-change-interval समस्या को हल करने के लिए लगता है। डिफ़ॉल्ट सेटिंग्स मेरे लिए पर्याप्त हैं।
ecerulm

setw -g c0-change-interval 100और setw -g c0-change-trigger 250मेरे लिए कोई फर्क नहीं पड़ता। मैं tmux-1.8 का उपयोग कर रहा हूं। क्या मैंने कुछ गलत किया?
सोलोटिम

@solotim मेरे tmux 1.9a पर काम करता है, हालाँकि मैंने इसमें जोड़ा set-window-option -g ...है .tmux.conf
पॉलि जूल 25'14

5
जाहिर है, इन tmux 2.2 में हटा दिया गया है। :(
मार्टिन सी। मार्टिन 13

20

मैं अभी भी Ubuntu 12.10 पर tmux 1.6-2 में यह समस्या है। एक वर्कअराउंड जो मैंने पाया है वह सत्र (उपसर्ग + डी) और फिर रिटटैच ( tmux attach, एक त्वरित शेल उर्फ ​​के लिए अच्छा उम्मीदवार) से अलग करना है। ऐसा लगता है कि tmux वास्तव में हुड के नीचे उत्तरदायी है --- आप पुष्टि कर सकते हैं कि आपकी प्रक्रिया वास्तव में ctrl-c के साथ तुरंत मार दी गई है --- यह सिर्फ ड्राइंग है जो अवरुद्ध है। डिटैच तुरंत काम करता है, और जब आप रीटेट करते हैं, तो ड्राइंग अंत तक छोड़ दिया जाएगा।


अच्छा वर्कअराउंड। ऐसा लगता है कि वास्तव में सब कुछ काम करता है, यहां तक ​​कि विभाजन के बीच स्विच करना, यह बस खींचा नहीं जाता है।
jmiserez 12

1
यह tmux attachसही होना चाहिए ?
पंडूबियर

उफ़, आप सही कह रहे हैं। फिक्स्ड।
जैक ओ'कॉनर

2
और अगर आप को अलग नहीं कर सकते हैं, उदाहरण के लिए नहीं यकीन है कि मैक्रो की, बस एक नई टर्मिनल विंडो खोलें और tmux attach
महमॉफ

5

जहां तक ​​मुझे पता है कि वर्तमान रिलीज में इसे रोकने का कोई तरीका नहीं है, लेकिन कुछ काम जारी है। आप tmux की मेलिंग सूची http://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689 पर कुछ पैच पा सकते हैं ।

वेब पर खोज करने के लिए एक अच्छा कीवर्ड "फ्लो कंट्रोल" है।


2
पैच मुख्य शाखा में मान्य क्यों नहीं है? यह समस्या सबसे महत्वपूर्ण कारण है जो मैं अभी भी gnu_screen का उपयोग करता हूं।
सोलोटिम

5

दुर्भाग्य से c0- * रेट लिमिटिंग के विकल्प tmux संस्करण 2.1 ( चैंज ) के रूप में हटा दिए गए हैं । जहां तक ​​मुझे पता है, रेट लिमिटिंग को कस्टमाइज़ करने का एकमात्र तरीका स्रोत कोड (tmux.h) में इसे प्रभावित करने वाले वेरिएबल को अपडेट करना है:

" READ_SIZE एक pty (इवेंट हाई वॉटरमार्क) से होल्ड करने के लिए डेटा का अधिकतम आकार है। READ_BACKOFF डेटा की मात्रा है, जो टैटी को आउटपुट करने से पहले इंतज़ार कर रहा है कि पीटीई रीड्स का बैकअप लिया जाएगा। READ_TIME कितनी देर पहले बैकअप लेना है। अगली बार (माइक्रोसेकंड में) अगर कोई टैट READ_BACKOFF से ऊपर है। "

आप चूक कहां पाएंगे: (tmux v2.2 के रूप में):

#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100

1
Tmux v2.3 में संकेतित चर मौजूद नहीं हैं।
bergercookie

4

जवाब https://superuser.com/a/589896/311481 ठीक काम करता है। मैं निम्नलिखित मूल्यों का उपयोग करता हूं:

setw -g c0-change-trigger 10
setw -g c0-change-interval 250

एक और टिप: यदि आप tmux के भीतर ssh का उपयोग करते हैं, तो इसके बजाय mosh का उपयोग करें: http://mosh.mit.edu/ यह प्रोग्राम के आउटपुट को प्रदर्शित करने के रूप में स्मार्ट व्यवहार करता है। यह उपयुक्त होने पर अंतिम स्क्रीन स्थिति छोड़ने वाले मध्यवर्ती प्रदर्शित करने की कोशिश करता है। तो tmux कभी भी फ्रीज नहीं होगा यदि इसके पैन के अंदर बहुत सारे आउटपुट mosh सेशन के अंदर उत्पन्न होते हैं।

SSH के विपरीत, mosh का UDP- आधारित प्रोटोकॉल पैकेट लॉस को इनायत से संभालता है, और नेटवर्क स्थितियों के आधार पर फ्रेम दर निर्धारित करता है। Mosh नेटवर्क बफ़र्स को नहीं भरता है, इसलिए Control-C हमेशा एक भगोड़ा प्रक्रिया को रोकने का काम करता है।

क्योंकि SSP [स्टेट सिंक्रोनाइज़ेशन प्रोटोकॉल जो mosh का उपयोग करता है] ऑब्जेक्ट लेयर पर काम करता है और सिंक्रोनाइज़ेशन की दर को नियंत्रित कर सकता है (दूसरे शब्दों में, फ्रेम रेट), इसे एप्लिकेशन से प्राप्त होने वाली प्रत्येक बाइट को भेजने की आवश्यकता नहीं है। इसका मतलब है कि MOS फ्रेम को विनियमित कर सकता है ताकि नेटवर्क बफ़र्स न भरें, कनेक्शन की जवाबदेही को बनाए रखें और सुनिश्चित करें कि कंट्रोल-सी हमेशा जल्दी काम करता है। हर बाइट भेजने वाले प्रोटोकॉल ऐसा नहीं कर सकते।


0

विभिन्न टर्मिनल एमुलेटर का प्रयास करें। RedHat 6.5 पर, konsole (KDE) में फ्रीजिंग इश्यू नहीं है (tmux 2.3 और मास्टर); हालाँकि, xterm और सूक्ति-टर्मिनल दोनों ही खराब ठंड का अनुभव करते हैं।


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