यह कैसे पता चलेगा कि किस कमांड को बिना रुके चलाया जा रहा है?


20

मेरे उदाहरण में, मैं एक कमांड चला रहा हूं जिसे निष्पादित होने में बहुत समय लगता है (कई घंटे)।

मुझे वास्तव में याद नहीं है कि क्या मैंने मेक या मेक -j4 दर्ज किया है।

बेशक मैं इसे रोक सकता हूं और इसे जानने के लिए कुंजी दबा सकता हूं या इतिहास की जांच कर सकता हूं, लेकिन यह प्रक्रिया को रोक देगा और मैं नहीं चाहता कि ऐसा हो (यदि यह पहले से ही मेक -j4 कर रहा है)।

क्या यह जानने का कोई तरीका है कि प्रक्रिया को रोकने के बिना किस कमांड को निष्पादित किया जा रहा है?


5
दूसरे टर्मिनल से, कोशिश करेंpgrep -a make
John1024

2
के मामले में makeआप इसे रोक सकते हैं और पुनः आरंभ कर सकते हैं और इसे वहीं छोड़ देना चाहिए जहां इसे छोड़ा गया है।
user253751

जवाबों:


34

यदि आप makeअपने कंप्यूटर पर चल रहे हर उदाहरण के लिए पूर्ण कमांड लाइन देखना चाहते हैं , तो एक नया टर्मिनल खोलें और कोशिश करें:

pgrep -a make

pgrepएक प्रोग्राम है जो आपके कंप्यूटर पर सभी प्रक्रियाओं के माध्यम से खोज करता है। इस मामले में, यह नामित कार्यक्रमों की तलाश में है make। विकल्प प्रत्येक मिलान प्रक्रिया के लिए प्रक्रिया आईडी और पूर्ण कमांड लाइन दोनों को सूचीबद्ध करने के लिए -aकहता pgrepहै। (बिना -a, यह सिर्फ प्रक्रिया आईडी लौटाएगा।) pgrep के कई विकल्पों की अधिक जानकारी के लिए, देखें man pgrep


7
यह प्रश्न में एक की तरह सरल मामलों के लिए उपयोगी है। हालाँकि यदि कमांड में पाइपलाइन, लूप, कमांड के क्रम, आंतरिक कमांड, या वैरिएबल का विस्तार होता है, तो आप जो pgrepकुछ भी देखेंगे वह कमांड से अलग दिखेगा जो कमांड लाइन पर टाइप किया गया था।
kasperd

28

जबकि टर्मिनल विंडो सक्रिय है आप Ctrl+ को दबाकर प्रक्रिया को रोक (सस्पेंड) कर सकते हैं Z। आप तब टाइप करके बैकग्राउंड में जॉब को पुश कर सकते हैं bg(आपकी जॉब अब बैकग्राउंड में जारी रहेगी और आप कमांड लाइन पर एक ही समय में काम कर सकते हैं; यह कमांड लाइन &के अंत में जॉब शुरू करने के बराबर है )। फिर कर्सर-तीर (ऊपर और नीचे) का उपयोग करके देखें कि आपने किस कमांड का उपयोग किया है। यदि आप चाहते हैं (लेकिन यह आवश्यक नहीं है) तो आप टाइप करके अपने काम को अग्रभूमि में ला सकते हैं fg


7
यह कुछ कमांड्स के साथ काम करता है लेकिन सभी नहीं। उदाहरण के लिए यदि आपने एक लूप टाइप किया है for X in {1..1000} ; do sleep $X ; doneतो लूप बाधित होगा और शेष पुनरावृत्तियों नहीं होगा।
कैस्परल्ड

11
@kasperd हाँ, अगर आप मुझसे पूछें तो काफी गुस्सा आ रहा है, लेकिन मैंने उस मुद्दे के लिए एक अच्छा हल खोज लिया। कोष्ठक में उस तरह की एक जटिल कमांड को घेरें ताकि यह एक उपधारा हो। फिर Ctrl-Z पूरे सब्सक्रिप्शन को निलंबित कर देगा और सही तरीके से फिर से शुरू करेगा।
पेंग्विन 359

@kasperd बैश में नहीं, लेकिन वे zsh में करते हैं।
जोएल

4
नौकरी को पृष्ठभूमि में रखने की आवश्यकता नहीं है: यह निलंबित करने के लिए पर्याप्त है, इतिहास की जांच करें (या jobs, जैसा कि @ ichabod के उत्तर में दिखाया गया है), और फिर इसे फिर से शुरू करें fg
कोनराड रुडोल्फ

10

मैं स्टीफन की तरह कुछ करता हूं: ^ काम को रोकने के लिए जेड, और फिर मैं दौड़ता हूं jobs। यदि आपके पास कई प्रक्रियाएं चल रही हैं, तो आपको यह पता लगाना होगा कि आप किस काम को रोक रहे थे, लेकिन यह आम तौर पर कमांड लाइन देगा। फिर fgनिष्पादन जारी रखने के लिए दौड़ें ।


1

इसे गतिशील रूप से देखने का एक अच्छा तरीका शीर्ष चलाना है, और यह आपको समग्र सिस्टम स्थिति और सिस्टम पर चल रही प्रक्रियाओं को बताता है।

'Ps ux' करना आपकी प्रक्रियाओं को pid ​​और अन्य जानकारी के साथ दिखाता है, आप उनमें से कुछ को मारने के लिए कौशल का उपयोग कर सकते हैं यदि आप चाहें, तो इसके लिए मैन पेज एक अच्छा संसाधन है, और एक कौशल या किल -9 करने से चिपचिपी प्रक्रियाएं होती हैं। डिवाइस वेट आदि में लटका दिया जाता है। आप अन्य संकेतों को भी भेज सकते हैं जैसे -hup, डेमॉन रिस्टार्ट हो जाता है आदि।

शीर्ष अच्छा है क्योंकि यह आपको प्रक्रिया आकार, बीता हुआ समय और वर्तमान सीपीयू स्थिति और स्मृति और स्वैप की प्रक्रिया दिखाता है।

मैं अक्सर एक $ मेक> & make.out & करता हूं और फिर मेक.आउट लॉग फाइल पर कम या टेल -f करता हूं। चूंकि अब मेरे शेल सत्र से प्रक्रिया के रूप में अलग कर दिया जाता है।

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