पृष्ठभूमि प्रक्रिया कैसे समाप्त करें?


195

मैंने बैकग्राउंड में रिमोट मशीन का उपयोग करके एक wget शुरू किया है &। अचानक यह डाउनलोड करना बंद कर देता है। मैं इसकी प्रक्रिया समाप्त करना चाहता हूं, फिर कमांड को फिर से चलाएं। मैं इसे कैसे समाप्त कर सकता हूं?

मैंने इसकी शेल विंडो बंद नहीं की है। लेकिन जैसा कि आप जानते हैं कि यह Ctrl+ Cऔर Ctrl+ का उपयोग करना बंद नहीं करता है Z

जवाबों:


255

इसके बारे में जाने के कई तरीके हैं।

विधि # 1 - पीएस

आप psइस प्रक्रिया के लिए प्रक्रिया आईडी खोजने के लिए कमांड का उपयोग कर सकते हैं और फिर प्रक्रिया को मारने के लिए PID का उपयोग कर सकते हैं।

उदाहरण

$ ps -eaf | grep [w]get 
saml      1713  1709  0 Dec10 pts/0    00:00:00 wget ...

$ kill 1713

विधि # 2 - pgrep

आप प्रक्रिया आईडी का उपयोग करके भी पा सकते हैं pgrep

उदाहरण

$ pgrep wget
1234

$ kill 1234

विधि # 3 - pkill

यदि आप सुनिश्चित हैं कि यह केवल wgetआपके द्वारा चलाया गया है तो आप कमांड pkillको नाम से मारने का उपयोग कर सकते हैं ।

उदाहरण

$ pkill wget

विधि # 4 - नौकरी

यदि आप उसी शेल में हैं, जहाँ से आपने काम चलाया है जो अब पृष्ठभूमि में है। यदि आप jobsकमांड का उपयोग करके अभी भी चल रहे हैं, तो आप इसकी जांच कर सकते हैं और इसके जॉब नंबर से इसे मार भी सकते हैं।

उदाहरण

मेरे नकली नौकरी, sleep

$ sleep 100 &
[1] 4542

यह नौकरी नंबर है। नोट: संख्या 4542 प्रक्रिया आईडी है।

$ jobs
[1]+  Running                 sleep 100 &

$ kill %1
[1]+  Terminated              sleep 100

विधि # 5 - एफजी

आप fgकमांड का उपयोग करके बैकग्राउंड वाली नौकरी को अग्रभूमि में ला सकते हैं ।

उदाहरण

नकली नौकरी, sleep

$ sleep 100 &
[1] 4650

नौकरी का नंबर मिलता है।

$ jobs
[1]+  Running                 sleep 100 &

नौकरी # 1 को अग्रभूमि में लाएं, और फिर Ctrl+ का उपयोग करें C

$ fg 1
sleep 100
^C
$

के jobsपास कोई outputऔर fg साईस नहीं है -bash: fg: 1: no such job:। लेकिन टाइपिंग fgअच्छी तरह से काम करती है और अच्छी तरह से भी pkill wgetकाम करती है। लेकिन ps -eaf|grep wgetऔर फिर kill <process number>खुराक काम बंद नहीं है। ps: मैं तीसरे नंबर को प्रोसेस नंबर के रूप में उपयोग करता हूं ।
मोहम्मद एत्माददार

1
@MohammadEtemaddar - के आउटपुट से 2 नंबर का उपयोग करें ps। तीसरा # माता-पिता की प्रक्रिया आईडी है।
SLM

1
@ मोहम्मदइत्तेमदार - आह, पीएस grep ढूँढ रहा है। इसे ऐसे करें ps -eaef| grep [w]get:।
SLM

1
@MohammadEtemaddar - आप भी उपयोग कर सकते हैं pgrep, बजाय pgrep wget
slm

2
@ मोहम्मदइत्तेमदार - क्षमा करें अतिरिक्त ई एक टाइपो है। पढ़ना चाहिए ps -eaf | grep [w]get। विकल्प psमैन पेज में हैं। man ps
slm

70

बैश में आप fgकाम को अग्रभूमि में लाने के लिए उपयोग कर सकते हैं और फिर Ctrl+ का उपयोग कर सकते हैंC

या पृष्ठभूमि के साथ प्रक्रिया को सूचीबद्ध करें jobsऔर फिर करें

kill %1

(1 नंबर के साथ jobsआपको दिया नंबर )


13

आप kill $!हाल ही में देखी गई नौकरी को मारने के लिए समान रूप से उपयोग कर सकते हैं ।


यदि यह बैश प्रोफाइल में एक उपनाम की तरह एक कमांड के रूप में उपयोग किया जाता है, तो सिंगल कोट्स में लपेटना सुनिश्चित करें।
नैट रिटर

6

संपादित करें: एक बार अग्रभूमि में, आप कर सकते हैं Ctrl+ C, या @ ज़ेल्डा के रूप में उल्लेख करते हैं, '% x' के साथ मारें जहां 'x' कार्य संख्या डिफ़ॉल्ट संकेत भेजेगा (लिनक्स के मामले में सबसे अधिक संभावना SIGTERM)।

बस fgइसे अग्रभूमि में लाने के लिए टाइप करें, अगर यह अंतिम प्रक्रिया थी जिसे आपने (& 'के साथ) देखा था।

यदि यह अंतिम नहीं था, तो टाइप करें: jobsऔर 'जॉब नंबर' खोजें, जो '[]' में दर्शाया गया है। फिर बस टाइप करें:

fg 2

..जहाँ '2' नौकरी का नंबर है, उदाहरण के लिए:

foo@bar:~/junk/books$ jobs
[1]+  Running                 okular how_to_cook_a_turkey.pdf &
foo@bar:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf            <- this is now in the foreground.

4

सही तरीका टाइप करना है jobsतो इसे मारने के लिए जॉब नंबर का उपयोग करें। इसे मारने के लिए pid का उपयोग करने के लिए आपको पहले उत्तर में बताए अनुसार इसे अग्रभूमि में लाने की आवश्यकता है।

इसे इस्तेमाल करे

~/Desktop$ sleep 1000 &
[1] 7056

~/Desktop$ jobs

[1]+  Running  sleep 1000 &

/Desktop$ kill %1  #(%1 is the job number)

यदि आप इसे मारने के तुरंत बाद नौकरी चलाते हैं तो आपको यह देखना चाहिए

Desktop$ jobs
[1]+  Terminated              sleep 1000

4

एक बात जो मुझे यहाँ दिखाई नहीं दे रही है, जिसे मैंने विशेष रूप से कमांडों का परीक्षण करते समय बहुत उपयोगी पाया है pidof। आप pidof [command]वर्तमान में चल रही प्रक्रिया की प्रक्रिया आईडी खोजने के लिए उपयोग कर सकते हैं । मुझे यह पसंद है क्योंकि यह मुझे उस कमांड की आईडी को जल्दी से ढूंढने की अनुमति देता है जिसे मैं चाहता हूं, जो आमतौर पर कुछ है जो मैंने अभी-अभी लागू किया है।

एक बार जब आपके पास पिड होता है, तो आप बस प्रक्रिया को मार सकते हैं। यह एक प्रक्रिया को मारने के लिए सरल स्क्रिप्ट बनाने की अनुमति देता है केवल अगर यह वर्तमान में चल रहा है।


1
आह यह मेरी मदद की! मार% 1 किसी कारण से काम नहीं कर रहा था, "मार: तर्क को पार्स करने में विफल रहा: '% 1'" और Ctrl + C काम नहीं कर रहा था; PS या किसी भी चीज़ में प्रक्रिया नहीं मिल सकी क्योंकि यह रूट था (मैं भूल गया कि मैंने इसके साथ sudo का इस्तेमाल किया था)
mjohnsonengr

1

एक सामान्य उदाहरण stressउपकरण है। मान लें कि आप निम्नलिखित भाग गए:

$ stress -c 4 -m 4 

और टर्मिनल विंडो बंद कर दी। यह प्रक्रिया आपके संसाधनों को पृष्ठभूमि से खाती रहेगी।

हर्स का मैं क्या करता हूं:

$ x=`pgrep stress` ; sudo kill -9 $x 

pgrepविषय की प्रक्रिया के पीआईडी ​​को सूचीबद्ध करता है और इसे चर में संग्रहीत करता है xजिसे तब kill -9इसे समाप्त करने के लिए उपयोग किया जाता है ।


0

अंतिम रोक प्रक्रिया में (Ctrl-Z) आपको मार देगा:

kill %%
kill -9 %%

या चुनना चाहते हैं, तो उपयोग करें:

jobs

फिर:

kill %N

पसंद kill %2

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