मैं लिनक्स में अंतिम स्पॉन्ड बैकग्राउंड टास्क को कैसे मार सकता हूँ?
उदाहरण:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
मैं लिनक्स में अंतिम स्पॉन्ड बैकग्राउंड टास्क को कैसे मार सकता हूँ?
उदाहरण:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
जवाबों:
बैश में इसके लिए एक विशेष चर है:
kill $!
$! पृष्ठभूमि में निष्पादित अंतिम प्रक्रिया के पीआईडी तक फैलता है।
^Z
पृष्ठभूमि की नौकरियां नहीं हैं, यह उन्हें रोकता है। एक बाद bg
में वास्तविक 'बैकग्राउंडिंग' (पृष्ठभूमि में निष्पादन फिर से शुरू) करता है, और उसके बाद $!
उम्मीद के मुताबिक काम करता है।
????
हत्या के बाद एक या अधिक आदेशों के लिए खड़ा होने को मानते हुए , अगर उन आदेशों में से कोई भी पृष्ठभूमि प्रक्रिया द्वारा किए गए काम पर निर्भर करता है, तो किसी भी सफाई या परिष्करण-कार्यों के प्रति सावधान रहें, जो पृष्ठभूमि प्रक्रिया एक सिग्नल हैंडलर में प्रदर्शन कर सकती है एक जाल (संकेत) प्राप्त करना। इस तरह के किसी भी 'आश्रित' आदेशों में से पहले एक जोड़ने के लिए सबसे अच्छा wait
(शायद sync
या इसके बाद भी sleep <n>
)।
आप नौकरी के नंबर से मार सकते हैं। जब आप किसी कार्य को पृष्ठभूमि में रखते हैं तो आपको कुछ इस तरह दिखाई देगा:
$ ./script &
[1] 35341
यह [1]
नौकरी की संख्या है और इसे इस तरह संदर्भित किया जा सकता है:
$ kill %1
$ kill %% # Most recent background job
जॉब नंबरों की सूची देखने के लिए jobs
कमांड का उपयोग करें । इससे अधिक man bash
:
शेल में किसी नौकरी को संदर्भित करने के कई तरीके हैं। चरित्र
%
एक नौकरी के नाम का परिचय देता है। जॉब नंबर केn
रूप में संदर्भित किया जा सकता है%n
। इसे शुरू करने के लिए उपयोग किए गए नाम के उपसर्ग का उपयोग करके या इसके कमांड लाइन में दिखाई देने वाले सबस्ट्रिंग का उपयोग करके एक नौकरी भी संदर्भित की जा सकती है। उदाहरण के लिए,%ce
एक रुकी हुईce
नौकरी को संदर्भित करता है । यदि उपसर्ग एक से अधिक काम से मेल खाता है, तो बैश एक त्रुटि की रिपोर्ट करता है।%?ce
दूसरी ओर, उपयोग करना ,ce
कमांड लाइन में स्ट्रिंग वाली किसी भी नौकरी को संदर्भित करता है । यदि विकल्प एक से अधिक कार्य से मेल खाता है, तो बैश एक त्रुटि की रिपोर्ट करता है। प्रतीकों%%
और%+
वर्तमान नौकरी के शेल की धारणा को देखें, जो कि पिछली नौकरी है, जबकि यह अग्रभूमि में थी या पृष्ठभूमि में शुरू हुई थी। पिछली नौकरी का उपयोग करके संदर्भित किया जा सकता है%-
। नौकरियों से संबंधित आउटपुट में (उदाहरण के लिए, जॉब्स कमांड का आउटपुट), वर्तमान जॉब को हमेशा ए+
और पिछले जॉब को ए के साथ फ्लैग किया जाता है-
। एक एकल%
(बिना नौकरी के विनिर्देश के साथ) वर्तमान नौकरी को भी संदर्भित करता है।
set -m
), यह इंटरैक्टिव उपयोग के लिए है। Stackoverflow.com/questions/690266/… को भी देखें
%1
और %%
- विशेष रूप से। कुछ चीजें Ctrl-C पर नहीं मरती हैं, इसलिए आपको उन्हें Ctrl-Z करने की आवश्यकता है, और फिर kill -9 %%
। एक उदाहरण जहां मैंने इसे उपयोगी पाया है: while true; do mplayer <some unstable online radio>; date >> restarts.log; done
- Ctrl-C आपको अगले लूप पुनरावृत्ति में ले जाएगा। इससे पहले कि मैं ps
या शायद करना था jobs -l
, और फिर पीआईडी टाइप करें, जो थकाऊ है।
while true
साथ प्रतिस्थापित करना चाहते हो सकता है while sleep 1
। यह आपको पुनरारंभ करने से पहले एक छोटी सी देरी देगा यदि आप उस के साथ रह सकते हैं, और यदि आप दो बार ctrl-c मारते हैं, तो दूसरा नींद को बाधित करेगा, इसे गैर-शून्य निकास के साथ समाप्त करेगा और लूप से बाहर निकलेगा।
यह सभी पृष्ठभूमि प्रक्रियाओं को मारना चाहिए:
jobs -p | xargs kill -9
kill -9 %%
टाइपिंग कम है :)
यह विषय के उत्तर से बाहर है, लेकिन, जो रुचि रखते हैं, उनके लिए यह मूल्यवान है।
जैसा कि @ जॉन कुगेलमैन के जवाब में,% नौकरी विनिर्देश से संबंधित है। कैसे कुशलता से मिल जाए? कम & पैटर्न कमांड का उपयोग करें, लगता है कि आदमी कम पेजर (निश्चित नहीं है) का उपयोग करता है, मैन बैश टाइप &% में तो टाइप एंटर केवल लाइनों को दिखाएगा जिसमें '%' है, सभी को फिर से टाइप करने के लिए टाइप करें। फिर दर्ज करें।
बस हत्यारे आदेश का उपयोग करें:
हत्या का कार्यनाम
अधिक जानकारी और अधिक उन्नत विकल्पों के लिए, "मैन किंडल" टाइप करें।
killall python
या तो था killall java
।