मैं नए टर्मिनल टैब लोडिंग समय को कैसे तेज कर सकता हूं?


93

मैं शेर में टर्मिनल स्टार्टअप को कैसे गति दे सकता हूं?

मैं टर्मिनल एप्लिकेशन के स्टार्टअप की बात नहीं कर रहा हूं, लेकिन स्टार्टअप टर्मिनल की खिड़कियों की तरह, जब मैं एक नया टैब खोलता हूं।

मेरे पास मेरी .bash_profile फ़ाइल में कुछ भी नहीं है और मैं rm -rf /private/var/log/asl/*.aslहर 4 घंटे (जो उन फ़ाइलों को साफ़ करता है जो आमतौर पर टर्मिनल को धीमा करते हैं) चलाते हैं ।

वर्तमान में, जब मैं एक नया टैब खोलता हूं, तब तक 3-4 सेकंड लगते हैं जब तक कि मैं कुछ नहीं चला सकता।


2
शायद आपके सिस्टम में कुछ और गड़बड़ है? यह धीमा नहीं होना चाहिए। कभी-कभी यह मेरे लिए एक या दो सेकंड लेता है, लेकिन आमतौर पर यह केवल एक दूसरा विभाजन होता है। और मेरे पास एक निष्पक्ष सा है .bash_profile( ~/.profileवैसे भी जांच करें )। इसके अलावा: ध्यान दें कि बैश लोड होने के दौरान आप टाइप करना शुरू कर सकते हैं, और आमतौर पर जो आप टाइप करते हैं वह कमांड प्रॉम्प्ट में कॉपी हो जाएगा एक बार तैयार होने के बाद।
अभि बेकर्ट

क्या आप नेटवर्क खाते या नेटवर्क होम निर्देशिका का उपयोग कर रहे हैं? क्या टर्मिनल बनाते समय उपयोगकर्ता इनपुट के लिए उत्तरदायी है? क्या यह कताई व्यस्त कर्सर को प्रदर्शित करता है?
क्रिस पेज

1
यह जानने के लिए कि टर्मिनल कहाँ समय बिता रहा है, गतिविधि मॉनिटर खोलें, टर्मिनल का चयन करें और नमूना प्रक्रिया टूलबार बटन पर क्लिक करें, फिर तुरंत टर्मिनल पर जाएं और एक नई विंडो / टैब बनाएं। नमूना जहां समय चल रहा है, वहां सुराग दे सकता है। गतिविधि मॉनिटर में प्रक्रिया सूची देखें: यदि "लॉगिन" या "बैश" (या जो भी शेल आप उपयोग कर रहे हैं) देरी के दौरान सूची में दिखाई देते हैं, तो इसका मतलब है कि उन दो कार्यक्रमों में से एक में देरी होने की संभावना है और नहीं टर्मिनल।
क्रिस पेज

क्या आपने अपने PATH चर की जाँच की है? मैंने देखा कि मेरा कुछ भ्रम के कारण कई बार दोहराव के साथ बेहूदा था। मैंने दोहराव को हटा दिया और सब कुछ खत्म हो गया!
190290000 रूबल मैन

जवाबों:


93

संक्षिप्त जवाब:

समस्या एक संभावित (संभावित) महंगी ASL सिस्टम लॉग लुकअप के कारण होती है। इस क्रिया को देखने के लिए, sudo fs_usage | grep 'asl.*login'एक टर्मिनल विंडो में चलाएँ , फिर एक नई टर्मिनल विंडो खोलें।

समस्या को हल करने के लिए, एक गैर-मानक शेल लॉन्च करने के लिए टर्मिनल कॉन्फ़िगर करें:

  1. अपने पसंदीदा शेल में एक सिमलिंक बनाएं। उदाहरण के लिए:sudo ln -s /bin/bash /usr/local/bin/bash
  2. टर्मिनल प्राथमिकताएं खोलें और "सामान्य" टैब चुनें।
  3. "शेल्स ओपन विथ: कमांड" चुनें और आपके द्वारा चरण १. एग "/ usr / लोकल / बिन / बैश" में बनाया गया सिमिलिंक दर्ज करें।

नोट 1: आपको "टर्मिनल प्राथमिकताएँ> प्रोफ़ाइल> शेल> समापन से पहले पूछें" पर प्रक्रिया सूची में जोड़ना bashऔर जोड़ना पड़ सकता है -bash

नोट 2: /usr/local/binOS X 10.11 (El Capitan) रूटलेस मोड में राइट है।

फिक्स को सत्यापित करने के लिए:

  • एक नई टर्मिनल विंडो खोलें।
  • "अंतिम लॉगिन:" शीर्ष पर प्रदर्शित नहीं होना चाहिए
  • निरीक्षक (कमांड + I) खोलें और जानकारी टैब चुनें।
  • कमांड को पढ़ना चाहिए login -pfq username /usr/bin/bashयाlogin -pfql username ...

महत्वपूर्ण: यदि लॉगिन कमांड में -qपैरामीटर शामिल नहीं है , तो आपने समस्या को ठीक नहीं किया है।

आप यह sudo fs_usage | grep 'asl.*login'सत्यापित करने के लिए भी उपयोग कर सकते हैं कि /var/log/aslनई टर्मिनल विंडो खोलते समय एक्सेस नहीं किया गया है।

विवरण:

यहाँ पर कई तरह के कीड़े हैं।

सुस्ती का वास्तविक कारण है /usr/bin/login, जो डिफ़ॉल्ट रूप से आपके अंतिम लॉगिन की तारीख को प्रदर्शित करेगा। इस अंतिम लॉगिन तिथि को प्राप्त करने के लिए, यह ASL (Apple सिस्टम लॉग) डेटाबेस को खोजता है /var/log/asl/। ये लॉग फ़ाइलें बहुत अधिक खंडित हो सकती हैं और यह फ़ाइल विखंडन है जो नई विंडो या टैब खोलने पर देरी का कारण बनती है। (बग 1)

अंतिम लॉगिन के लिए एएसएल खोज को दबाने का एकमात्र तरीका -qपैरामीटर को पास करना है /usr/bin/login.hushloginफ़ाइल भी "अंतिम लॉगिन" प्रदर्शन से रोक देगा, लेकिन यह महंगा एएसएल खोज को दबाने नहीं है। (बग 2)

टर्मिनल हमेशा /usr/bin/loginप्रत्येक नई विंडो / शेल लॉन्च करने के लिए उपयोग करता है। शेल को सीधे लॉन्च करने का कोई विकल्प नहीं है और न ही /usr/bin/login(बग 3) को दिए गए मापदंडों को सीधे नियंत्रित करने का कोई तरीका है ।

जैसा कि यह पता चला है, जब यह गैर-मानक शेल का उपयोग करने के लिए कॉन्फ़िगर किया गया है तो टर्मिनल -qपैरामीटर पास करेगा । (बग 4)/usr/bin/login

-qपैरामीटर है कि हम क्या है, समस्या से बचने की जरूरत इसलिए करने के लिए सिमलिंक है /usr/local/bin/bash


6
क्या आप जानते हैं कि -q को क्यों जोड़ा जाता है अगर कमांड / बिन / बैश का सिमलिंक है लेकिन यदि यह बिन / बैश है तो नहीं?
Lri

3
@LauriRanta यह 10.7 और 10.8 टर्मिनल में एक बग लगता है। जब स्टार्टअप कमांड सेट होता है तो /bin/bashयह व्यवहार करता है जैसे कि डिफ़ॉल्ट लॉगिन शेल को चुना गया था। के अलावा कोई भी कमांड /bin/bashसही तरीके से काम करेगा, इसलिए / usr / bin / bash का उपयोग करना केवल एक वर्कअराउंड है। यह बग स्नो लेपर्ड में मौजूद नहीं है।
डैरेन

5
@ डैरेन क्या आपने इस संदिग्ध बग की सूचना Apple को दी है? यदि नहीं, तो आप ऐसा कर सकते हैं: bugreport.apple.com
ग्राहम मिलन

3
दुर्भाग्यपूर्ण है, इसका परिणाम यह है कि हर बार जब आप योसेमाइट पर टर्मिनल बंद करते हैं, तो प्रोमिस के बारे में प्रोमोट होता है। तो एक अच्छा तय नहीं :(
क्लॉस जोर्जेंसन

2
@ ClausJørgensen मैंने उस समस्या का अनुभव नहीं किया है। आप प्रोफाइल टैब के तहत "शेल" सेटिंग्स की जांच करना चाह सकते हैं।
डैरेन

20

मुझे जो कुछ चाहिए था वह लॉगिन शेल से कमांडर /bin/bash -il के वरीयताएँ> प्रोफाइल> जनरल> कमांड में बदल रहा था ।

मुझे विकल्प की आवश्यकता थी -l( मेक बैश एक्ट जैसे कि इसे एक लॉगिन शेल के रूप में लागू किया गया था ) से पर्यावरण चर सेट करने के लिए जोड़ा गया~/.bash_profile


जो स्वीकृत प्रश्न के अनुसार ASL की लॉगिन खोज को रोक देता है
user151019

4
सभी समाधानों में से, इस एक ने मेरे लिए काम किया। +50!
भाविन दोशी

1
इस धागे में चारों ओर महान जानकारी! यह मेरे द्वारा उपयोग किया जाने वाला समाधान है क्योंकि इसमें सिम्बलिंक या कुछ भी बनाने की आवश्यकता नहीं थी। इस समाधान के साथ मेरा नया शेल स्टार्टअप समय ~ 5-10seconds से तुरंत चला गया है।
डस्टबिन

16

.hushlogin

अपने घर के फोल्डर में एक खाली फ़ाइल बनाएं जिसे कहा जाता है .hushlogin; इससे टर्मिनल .app टैब को प्रदर्शित होने में लगने वाले समय में काफी कमी आएगी।

आप .hushloginनिम्नलिखित कमांड का उपयोग करके फाइल को Terminal.app में बना सकते हैं :

touch ~/.hushlogin

फ़ाइल तुरंत प्रभावी होगी।

आप .hushloginसामान्य रूप से लॉगिन मैनुअल में फ़ाइल और लॉगिन प्रक्रिया के बारे में अधिक जान सकते हैं ।

लॉगिन प्रक्रिया को शांत करना

जब आप एक नया टर्मिनल टैब बनाते हैं, तो आप लॉगिन प्रक्रिया से गुजर रहे हैं। इस प्रक्रिया में आपके पिछले लॉगिन सत्र, दिन का संदेश और सिस्टम संदेशों को प्रदर्शित करने के बारे में विभिन्न जानकारी प्राप्त करना शामिल है। यह महत्वपूर्ण देरी का स्रोत हो सकता है। देरी से गायब हो जाता है या नहीं, यह देखने के लिए इन संदेशों को देखने का प्रयास करें।


6
.hushlogin वास्तव में समस्या का समाधान नहीं करता है। इसका उपयोग करके पुष्टि की जा सकती है opensnoop। नीचे मेरा जवाब देखें।
डैरेन

1
@ ड्रेन: मैन लॉगिन मुझे बताता है: -q यह शांत लॉगिन को मजबूर करता है, जैसे कि एक .hushlogin मौजूद है। क्यू विकल्प आप कहते हैं कि इस मुद्दे को रोकता है, लेकिन यह बस hushlogin के साथ के रूप में करता है।
क्रिश्चियन

8

ठीक है मेरे पास डैरेन के समान निष्कर्ष है, हालांकि थोड़ा अलग प्रोफाइलिंग तंत्र (एनबी धीमी लॉगिन अभी भी योसेमाइट में हो सकता है)।

यहां यह बताने का एक तरीका है कि ओएस एक्स नमूना प्रोफाइलर कमांड का उपयोग करके एक नई लॉगिन विंडो शुरू करते समय वास्तव में क्या चल रहा है ।

पता करें कि एक सामान्य लॉगिन निष्पादन क्या कमांड है

$ ps -ef | grep login

आप कुछ इस तरह देखेंगे login -pfl username /bin/bash -c exec -la bash /bin/bash

profile_login.shनिम्न जोड़कर निम्न सामग्री के साथ एक स्क्रिप्ट फ़ाइल नाम बनाएँ

-c ""

इस तरह की सामग्री के साथ तुरंत बैश वापसी का अनुरोध करने के लिए खोज की गई कमांड के अंत में:

login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command

इसे अमल में लाएं

$ chmod u+x profile_login.sh

और sudo का उपयोग करके इसे चलाएं ( sampleकमांड की आवश्यकता है)

$ sudo ./profile_login.sh

ठीक है तो आगे बढ़ो और इसे चलाओ। उदाहरण के लिए purgeपहले कमांड निष्पादित करके । मेरे बॉक्स पर, मुझे एक बड़ा आउटपुट ग्राफ मिला। "सबसे बड़ी संख्या वाली शाखाओं" (आमतौर पर शीर्ष पर) की तलाश में मैंने निम्नलिखित दो सबसे बड़े अपराधियों को देखा :

कुछ कहा जाता है, pam_startजो pam ऑर्गेनिक लिबास इमेज खोलने के लिए प्रकट होता है

+   ! 1068 pam_start  (in libpam.2.dylib) + 132  [0x7fff97295ab0]
+   !    :   1066 openpam_dynamic  (in libpam.2.dylib) + 120  [0x7fff97293d14]
+   !    :   |   +   !   1042 coresymbolication_load_image(CSCppDyldSharedMemoryPage*, ImageLoader const*, unsigned long long)  (in dyld) + 143  [0x7fff66725411]
+   !    :   |   +   !   :     1042 mach_msg_trap  (in dyld) + 10  [0x7fff6674a472]

और कभी-कभी दूसरे अपराधी द्वारा पीछा किया जाता है getlastlogxbyname

+   ! 583 getlastlogxbyname  (in libsystem_c.dylib) + 212  [0x7fff92b3ef7a]
+   !       : 566 asl_file_open_read  (in libsystem_asl.dylib) + 143  [0x7fff8c27030d]
+   !       : | 566 __open_nocancel  (in libsystem_kernel.dylib) + 10  [0x7fff97b39012]    +   !       : | 566 __open_nocancel  (in libsystem_kernel.dylib) + 10  [0x7fff97b39012]

इसलिए मूल रूप से, दो अपराधी हैं। एक है pam(कुछ प्रकार की प्रमाणीकरण प्रणाली) और दूसरा यह asl"आपके नवीनतम लॉगिन का पता लगाता है" सामान। तो जाहिरा तौर पर सिर्फ अपनी /private/var/log/asl/*.aslफ़ाइलों को हटाने के लिए पर्याप्त नहीं है। वैसे भी मेरी मशीन पर पैम लोडिंग बहुत अधिक महंगी है, [एसएसडी]। उपरोक्त स्क्रिप्ट को चलाने के लिए स्वतंत्र महसूस करें और देखें कि क्या आपका सिस्टम समान है। दिलचस्प बात यह है कि इन विधि कॉलों का स्रोत कोड भी ऑनलाइन उपलब्ध है, उदाहरण के लिए ओपनपैम_डायनामिक

यदि मैं डैरेन के उत्तर का पालन करता हूं, और मेरे "गोले को" / बिन / बैश के अलावा किसी और चीज के लिए वरीयता के साथ खोलता हूं, तो मैं नई टर्मिनल टैब शुरू करने के लिए उपयोग की जाने वाली निम्न पंक्तियों को देखता हूं:

 $ ps -ef | grep login
  ... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash

तो अगर मैं अब sampleनए लॉगिन कमांड पर उसी चाल का उपयोग करता हूं

login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie

एक बहुत छोटा स्टैकट्रेस उत्पन्न होता है, जो सबसे बड़ा अपराधी है:

+         8 pam_end  (in libpam.2.dylib) + 190  [0x7fff97294ebb]
+             !           6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*)  (in dyld) + 143  [0x7fff6e0f634f]

मुझे लगता है कि यह इसलिए है क्योंकि लॉगिन "-q" पैरामीटर अब उपयोग किया जा रहा है। जाहिरा तौर पर यह पैरामीटर pam मॉड्यूल को लोड करने और अंतिम लॉगिन समय (दोनों अपराधियों) को देखने के लिए दोनों को छोड़ देता है। loginकमांड के डॉक्स के अनुसार , ~/.hushloginफ़ाइल को छूना एक ही काम करना चाहिए, लेकिन जाहिर है यह अब काम नहीं करता है [कम से कम मेरे साथ 10.4]।

इसलिए, सारांश में, /pStreet/var/log/asl/*.asl को हटाना पर्याप्त नहीं है (मेरे प्रयोग में, यह केवल वास्तविक मंदी के अधिकांश 1/3 के लिए जिम्मेदार है, हालांकि यदि आपके पास वहां फ़ाइलें थीं तो यह खाता हो सकता है अधिक प्रतिशत के लिए मुझे यकीन है)।

वैसे भी समान स्क्रिप्ट का उपयोग करते हुए, आपको यह बताने में सक्षम होना चाहिए कि आपकी स्थानीय मशीन किस कारण से खराब हो रही है, और देखें कि क्या उपरोक्त सुधार आपके लिए लागू होता है। यहाँ टिप्पणी करने के लिए स्वतंत्र महसूस करें।

अद्यतन: लगता है कि coresymbolication_load_imageअभी भी समय लग सकता है, तब भी जब login -pfqlआह्वान किया जाता है (संभवत: कुछ पीएएम प्रमाणीकरण मॉड्यूल या अन्य को केंद्रीय लॉगिन सर्वर या कुछ विषम "डायल आउट" करना है, इसलिए किसी तीसरे पक्ष की प्रतिक्रिया की प्रतीक्षा करनी होगी )। इसलिए मुझे जो एकमात्र वास्तविक समाधान मिला है, वह iTerm2 का उपयोग करना है, और वरीयताओं को बदलना है -> प्रोफाइल -> सामान्य -> /bin/bashइसके बजाय कमांड ।


1
एएसएल लुकअप के अलावा, लॉगिन में देरी अक्सर एक निर्देशिका सर्वर के साथ एक नेटवर्क पर होने के कारण होती है जो आपकी उपयोगकर्ता जानकारी के लिए पूछे जाने पर धीरे-धीरे जवाब दे रही है। यदि आप निर्देशिका सेवाओं के साथ नेटवर्क पर सक्षम नहीं हैं, तो मुझे नहीं पता कि सामान्य सिस्टम कंजेशन (सीपीयू उपयोग, मेमोरी दबाव, आई / ओ कंजेशन) के अलावा और क्या महत्वपूर्ण समय लगेगा।
क्रिस पेज

@ क्रिसहेज हाँ शायद कुछ नेटवर्क डायरेक्टरी सेवाओं में कुछ या अन्य, अच्छी टिप है।
रोज़गारपैक

3

यह सब कारण की जांच है। आप देख सकते हैं कि इनपुट द्वारा प्रक्रिया शुरू होने के दौरान क्या किया जा रहा है bash -xजो शेल को शुरू करने की प्रक्रिया को प्रिंट करेगा।

व्यक्तिगत रूप से, मैं केवल ऐप की सक्रियता और डी-सक्रियण के बीच देरी और गतिविधि की अवधि के बाद बनाए गए पहले टैब में ध्यान देता हूं। यह हमेशा मुझे लगता है कि यह स्मृति पृष्ठों के चारों ओर ले जाने के बारे में है।


2

4 और 10 हजार लाइनों के बीच अपने इतिहास को कम करें और शायद सभी सहेजी गई खिड़कियों को छोड़ने और त्यागने का प्रयास करें। मैंने देखा है कि दोनों धीमी मशीनों पर फर्क करते हैं - विशेष रूप से भंडारण के लिए एसएसडी के बिना।


2

मेरे मामले में, सफलता के बिना मेरी कार्य मशीन पर उपरोक्त प्रयास करने के बाद , मैंने पाया कि अपराधी सक्रिय निर्देशिका था। फिक्स को डायरेक्ट्री यूटिलिटी में जाना था और "लॉगिन के लिए मोबाइल अकाउंट बनाएं" सक्षम करने के लिए AD सर्विस सेटिंग्स ("एक्टिव डायरेक्ट्री" पर डबल-क्लिक करें):

डायरेक्टरी यूटिलिटी एप्लिकेशन w / एक्टिव डायरेक्ट्री सेटिंग्स का स्क्रीनशॉट खुलता है

यह जाहिरा तौर पर AD क्रेडेंशियल्स को स्थानीय रूप से कैश करने का कारण बनता है, इसलिए सिस्टम को अब हर बार सर्वर पर जाने की ज़रूरत नहीं होती है क्योंकि यह आपके पासवर्ड को मान्य करने का प्रयास करता है।

आप स्पॉटलाइट के साथ या सिस्टम वरीयताएँ / उपयोगकर्ता और समूह के "लॉगिन विकल्प" अनुभाग के माध्यम से निर्देशिका उपयोगिता प्राप्त कर सकते हैं ("नेटवर्क खाता सर्वर" के बगल में "संपादित करें ..." बटन का चयन करें):

उपयोगकर्ता और समूह फलक "लॉगिन विकल्प" और "संपादित करें ..." दिखा रहा है


0

बस दौडो:

sudo creatbyproc.d
sudo newproc.d

अलग-अलग टर्मिनलों में और उस दौरान क्या किया जा रहा है, यह देखने के लिए नया खुला खोलें।

यदि कुछ भी स्पष्ट नहीं है, तो निम्नलिखित प्रयास करें:

sudo dtruss -an Terminal

यह आपके सभी विवरणों को प्रिंट करेगा जो टैब लोडिंग समय पर हो रहा है।


0

/etc/profileलाइन खोलें और जोड़ें PATH=""ताकि यह इस तरह दिखे:

if [ -x /usr/libexec/path_helper ]; then
    PATH=""
    eval `/usr/libexec/path_helper -s`
fi

0

मेरे लिए समस्या यह थी कि सक्रिय निर्देशिका डोमेन सर्वर अमान्य था।

इसे बदलना फिर मैक को रिबूट करना इसे ठीक कर दिया।

यहाँ छवि विवरण दर्ज करें

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