कैसे एक भगोड़ा बिल्ली को मारने के लिए?


128

कई बार मैं गलती से उन catफाइलों पर कमांड चला देता हूं जिनमें कुछ हज़ार लाइनों तक की सामग्री होती है।

मैं + या + के catसाथ कमांड को मारने की कोशिश करता हूं , लेकिन टर्मिनल में कुल आउटपुट प्रदर्शित होने के बाद ही दोनों प्रभावी होते हैं, इसलिए मुझे पूरी तरह से निष्पादित होने तक इंतजार करना होगा ।CtrlCCtrlZcatcat

क्या कोई बेहतर उपाय है जो इंतजार करने से बचता है? क्योंकि कभी-कभी फाइलें 100MB तक के आकार की होती हैं, और इसके लिए इंतजार करना परेशान कर देता है।

मैं उपयोग कर रहा हूं tcsh


14
अधिक, कम, पूंछ, सिर जैसी आज्ञाओं का उपयोग करना बिल्ली का एक दिलचस्प विकल्प हो सकता है। (बेशक यह कोई जवाब नहीं है ...)
टोनियोक

25
यह सबसे बड़ा प्रश्न शीर्षक था जिसे मैंने कभी पढ़ा है। जब तक मैंने देखा कि प्रश्न का लिंक उल के लिए था, मुझे लगा कि आपको एक फरार बिल्ली के बच्चे को मारने में मदद की ज़रूरत है।
लेनज

5
क्या किसी अन्य एसई साइट से साइडबार प्रश्न पर डबल-टेक करना सवाल के आगे "उल" लोगो को देखने के लिए बहुत राहत मिली है । कोई बात नहीं, जारी रखें। (आम तौर पर, यह अर्क्वेड है कि बहुत ही गलत-गलत-आउट-ऑफ-कॉन्टेक्स्ट
क्वेश्चन

12
मैं curiosityकमांड की कोशिश करूँगा ...
सेकेम्टी

4
alias curiosity='sudo killall cat'
कैस

जवाबों:


76

यदि प्रश्न में फ़ाइल (ओं) में वास्तव में बहुत सारे डेटा होते हैं जो सिग्नल भेजते हैं तो वास्तव में catइसे समाप्त होने से पहले प्राप्त कर सकते हैं । आप वास्तव में जो निरीक्षण करते हैं वह आपके टर्मिनल की परिमित गति है - टर्मिनल catको डेटा भेजता है और टर्मिनल को यह सब प्रदर्शित करने में कुछ समय लगता है।

याद रखें, कि आम तौर पर इसे किसी न किसी तरह से आउटपुट के प्रत्येक लाइन के लिए पूरी आउटपुट विंडो को फिर से बनाना होता है (यानी विंडो की सामग्री को एक पंक्ति ऊपर ले जाएं और नीचे की अगली पंक्ति प्रिंट करें)। जबकि इसे और अधिक तेज़ बनाने के लिए तकनीक और एल्गोरिदम हैं, अगर इसे सीधे तरीके से किया गया था, तो भी कुछ समय लगता है।

इस प्रकार, यदि आप आउटपुट को जितनी जल्दी हो सके निकालना चाहते हैं , तो टर्मिनल विंडो को छिपाएं , क्योंकि तब आम तौर पर कोई वास्तविक पुनर्वितरण नहीं होता है। ग्राफिकल वातावरण में इसका मतलब या तो विंडो को छोटा कर सकता है या किसी अलग वर्चुअल डेस्कटॉप पर स्विच कर सकता है, लिनक्स वर्चुअल कंसोल पर बस एक दूसरे (( Ctrl+) Alt+ ) पर स्विच कर सकता है ।Fx

यह भी ध्यान दें कि यदि आपने इसे धीमे नेटवर्क लिंक (उदाहरण के लिए GSM कनेक्शन पर SSH) पर चलाया है, तो आप निश्चित रूप catसे सिग्नल द्वारा मारे जाने से पहले बहुत कम आउटपुट देखेंगे , क्योंकि टर्मिनल की गति किसी भी तरह से अड़चन नहीं होगी ।


6
यदि आप धीमे SSH पाइप के नीचे आने के लिए डेटा का इंतजार कर रहे हैं, तो आप कनेक्शन को बंद करने के लिए OpenSSH एस्केप अनुक्रम का उपयोग कर सकते हैं। एक नई लाइन पर, ~?उपलब्ध विकल्पों ( ~.बंद) को देखने के लिए टाइप करें ।
RJHunter 16

11
आप Ctrl + S के साथ आउटपुट को रोकने का भी प्रयास करते हैं जो भेजता है tty-stop-output। फिर आप Ctrl + C भेज सकते हैं। आउटपुट फिर से शुरू करने के लिए, Ctrl + Q ...
मार्टिन टूरनोइज

1
@Carpetsmoker ने परीक्षण किया कि, मेरे लिए Ubuntu 14.04 + टर्मिनेटर + zsh पर पाठ का प्रवाह बंद नहीं हुआ।
मुरु

@ ममरू धन्यवाद। मैंने इसका परीक्षण करने की कोशिश की, लेकिन समस्या को पुन: उत्पन्न करने में सक्षम नहीं था (मेरी प्रणाली बहुत तेज़ है, ऐसा प्रतीत होता है, या शायद मैंने कठिन प्रयास नहीं किया है)।
मार्टिन टूरनोइज

4
@Carpetsmoker मुझे डर है कि सॉफ्टवेयर प्रवाह नियंत्रण (जो कि Ctrl + S है) इस मामले में (फास्ट टर्मिनल लिंक का) बहुत मदद नहीं करेगा - डेटा पहले से ही टर्मिनल बफर में है और इसे संसाधित करने के लिए टर्मिनल की प्रतीक्षा कर रहा है। इसलिए Ctrl + S एप्लिकेशन को अधिक डेटा भेजने से रोकने के लिए बताएगा , लेकिन जो पहले ही भेजा जा चुका है, उसे अभी भी प्रदर्शित करना होगा।
पेट्रफ

4

टर्मिनल सेटअप

मुझे लगता है कि यह किसी भी बफरिंग मुद्दे की तुलना में टर्मिनल की स्थापना के तरीके के साथ करने के लिए अधिक है। के आउटपुट की जांच करें stty -a | grep intr, आपके पास intr = ^C;आउटपुट लाइन पर होना चाहिए यदि Ctrl- / Cपर सक्षम है । यदि ऐसा नहीं है, तो आप इसे सक्षम करने के लिए उपयोग कर सकते हैं । लाइन को अपने में जोड़ें या इसे स्थायी बनाने के लिए (या पहली बार इसे बदलने वाली लाइन को हटा दें!)।ttyptystty intr ^C.tcshrc.login

असफल Ctrl- C, आप के SIGQUITसाथ भेजने की कोशिश भी कर सकते हैं Ctrl- \। यदि यह काम नहीं करता है, तो फिर से यह देखने के stty -a | grep quitलिए जांचें कि क्या यह ठीक से सेट है।

टर्मिनल एमुलेटर सेटअप

अपने टर्मिनल एमुलेटर के लिए सेटिंग्स भी जांचें (यदि आप एक का उपयोग कर रहे हैं), तो यह हो सकता है कि इस स्तर पर एक शॉर्टकट सेट हो (शायद कॉपी या कुछ के लिए) और Ctrl- स्तर Cतक नहीं पहुंचता ptyहै। एक शॉर्टकट आपके डेस्कटॉप वातावरण या विंडो सिस्टम में कहीं और स्थापित किया जा सकता है।

लिनक्स पर एक अच्छा परीक्षण यदि आप एक टर्मिनल एमुलेटर का उपयोग कर रहे हैं, तो लिनक्स कंसोल ( Ctrl- Alt- F1) पर स्विच करें , वहां लॉगिन करें और देखें कि क्या समान व्यवहार होता है। यदि ऐसा नहीं होता है, तो यह सुझाव देता है कि समस्या आपके विंडो सिस्टम या टर्मिनल एमुलेटर के साथ है।

यह ptyडिवाइस से पढ़ने के बीच देरी के साथ एक मुद्दा हो सकता है जैसा कि पीटरफ ने सुझाव दिया था । लेकिन अगर यह मामला है और आपको वास्तव में प्रदर्शित होने के लिए मिनटों का इंतजार करना पड़ता है, तो निश्चित रूप से टर्मिनल एम्यूलेटर बहुत अधिक डेटा का बफ़रिंग तरीका है (या आपका पीसी बहुत धीमा है)। इसका उत्तर आपके टर्मिनल एमुलेटर सेटिंग्स में उस बफर साइज़ को कम करने या एक अलग उपयोग करने का एक तरीका खोजना होगा।

अतिरिक्त टिप

जोड़ने के लायक कुछ और; मैं आमतौर पर भगोड़ा catस्थिति में समाप्त होता हूं जब मैं गलती से catएक बाइनरी फ़ाइल। इसका अन्य प्रभाव आपकी टर्मिनल सेटिंग्स को खराब करने के लिए हो सकता है (यदि बाइनरी डेटा विभिन्न टर्मिनल एस्केप कोड से मेल खाने के लिए होता है जो यह अक्सर होता है)। यदि tputस्थापित किया गया है (आमतौर पर डिफ़ॉल्ट रूप से), तो आप निम्न कमांड के साथ पुनरारंभ करने से बच सकते हैं:

tput reset

3

यह क्या है tmuxविकल्प c0-change-intervalऔर c0-change-triggerके लिए बनाया गया। आपको फिर से शुरू होने वाले सत्र के लिए स्क्रीन मैनेजर का उपयोग करना चाहिए।


1

Ctrl- Oविकल्प यूनिक्स में 110 बॉड दिनों के बाद से किया गया है। रनवे कैट कमांड हमेशा एक समस्या थी जब एक लंबे एएससीआईआई फ़ाइल को धीमी आउटपुट डिवाइस पर डंप किया गया था और पूरी फाइल डिवाइस ड्राइवर आउटपुट बफर में रखी गई थी। Ctrl- Oबफर के फ्लश शुरू होगा और एक अनुवर्ती Ctrl- Oफ्लश बंद टॉगल होगा तो बिल्ली सामान्य गति से पढ़ा जा सकता है। Ctrl- Oदर्ज किया गया था और पूरी फाइल फ्लश हो जाएगी और जल्दी से एक कमांड प्रॉम्प्ट वापस करेगा।

लिनक्स डिवाइस ड्राइवर कोडर्स को इस सुविधा को जोड़ने के लिए जारी रखने की आवश्यकता महसूस हुई या नहीं, यह अज्ञात है। इस सुविधा को डिवाइस ड्राइवर स्तर पर जोड़ा गया था, जहां Ctrl- Sऔर Ctrl- Qकेवल लागू किया जा सकता है। मैंने इसका उपयोग बड़े डिबगिंग रन को बहुत सारे चेक प्रिंट के साथ डंप करने के लिए किया और फिर उस जगह तक स्क्रॉल किया जो मुझे देखने की ज़रूरत थी।


Ctrl-O आधुनिक लिनक्स में लागू नहीं होता है, कम से कम RHEL या Ubuntu सर्वर पर नहीं।
21

-1

बैश का उपयोग करते समय, आप Ctrl+ का उपयोग करके नौकरी को निलंबित कर सकते हैं Zऔर फिर उसे मार सकते हैं, या तो पीआईडी ​​का उपयोग करके या https://stackoverflow.com/questions/1624691/linux-kill-background-task (जैसे कि मार -9) से उत्तर का पालन करके %%)


3
लेकिन मैं उपयोग कर रहा हूं tcshऔर Ctrl + Z काम नहीं कर रहा है ... पहले से ही कहा गया है कि प्रश्न में है।
जिगरगांधी

हाँ, क्षमा करें, आपने अपने पोस्ट में नहीं पढ़ा कि आपने Ctrl + Z की कोशिश की और मैंने गलत तरीके से मान लिया कि Ctrl + Z को Ctrl + C के विपरीत शेल द्वारा नियंत्रित किया जाता है जो कि एप्लिकेशन द्वारा संभाला जाता है। इसलिए मुझे लगा कि Ctrl + Z ने तुरंत काम किया है जबकि Ctrl + C नहीं करता है।
Jannis

-1

सांत्वना आइकन पर क्लिक करके या दबाकर कोई नया कंसोल खोलें, उदाहरण के लिए Ctrl+ Alt+ F2। वहां, दर्ज करें

killall -9 cat

और बिल्ली को तब तक मारा जाएगा जब तक कि आपके पास एक बासी एनएफएस लॉक या "निर्बाध नींद" स्थिति न हो (खराब सेक्टर पर बिना टाइमआउट सेट के पढ़ें)।


10
समस्या यह नहीं है कि catयह catमरने से पहले टर्मिनल को क्या लिखा गया है , इसके बारे में नहीं पढ़ा गया है और अभी तक टर्मिनल एमुलेटर द्वारा अकेले संसाधित या प्रदर्शित नहीं होने दिया गया है (और pty ड्राइवर के अंदर (लिनक्स में लगभग 64kiB बड़ा) बफर में बैठा है) ।
स्टीफन चेज़लस

फिर कृपया इको 3> / proc / sys / vm / drop_caches आज़माएं जो बहुत सारे बफ़र्स को भी गिरा देगा।
थोरस्टेन स्टैक

7
नहीं, यह केवल कैश्ड डेटा को कभी नहीं छोड़ता जैसा कि कार्यक्षमता को प्रभावित करेगा!
स्टीफन चेजालस

4
@ThorstenStaerk drop_cachesकर्नेल द्वारा कैश के रूप में उपयोग किए जाने वाले पृष्ठों को नियंत्रित करता है (आमतौर पर एक फ़ाइल सिस्टम के लिए), टर्मिनलों, नेटवर्क ड्राइवरों के आंतरिक बफ़र और जैसे - अगर ऐसा नहीं किया, तो इसके काफी गंभीर परिणाम होंगे जैसे स्टीफन ने बताया (मूल रूप से आप डेटा खो देंगे) ।
पेट्रफ

1
killall -9 catयह भी किसी भी अन्य बिल्ली उदाहरण है कि अभी भी अन्य प्रक्रिया धागे में अच्छी बातें कर रही हो सकता है मार नहीं होगा ?
जो

-7

आप इस के साथ कोशिश कर सकते हैं

प्रदर्शन उपयोग रीसेट करें ctrl-j

यदि बिल्ली अभी भी चल रही है, तो एक नया टर्मिनल खोलें और इसे चलाएं pkill -9 -f cat"यह सभी बिल्ली प्रक्रियाओं को मार देगा।"


Ctrl + J काम नहीं करता है
JigarGandhi

26
'-f कैट' के साथ pkill काफी खतरनाक है, क्योंकि -f पूरे कमांड लाइनों में 'कैट' पैटर्न की तलाश करेगा, जो होने की संभावना है, और अवांछित परिणाम का कारण बन सकता है ...
tonioc

2
उदाहरण के लिए, pkill -f catमेरे डेस्कटॉप पर Xfce4 के टास्कबार के सिस्टम ट्रे क्षेत्र को मार देगा।
मार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.