2011-11-10 11 views
7

मैं की तरह एक स्क्रिप्ट चलाने को बचाने के लिए कैसे:मारने उत्पादन

sleep 20 & 
PID=$! 
kill -9 $PID >/dev/null 2>&1 

मैं न स्क्रिप्ट चाहते की तरह उत्पादन दिखाने:

line 51: 22943 Killed sleep 

मैं वजह से ऐसा हो पता नहीं है, मैं पुन: निर्देशित है आउटपुट/dev/null

उत्तर

15

संदेश kill या पृष्ठभूमि कमांड से नहीं आ रहा है, यह बैश से आ रहा है जब यह पता चलता है कि इसकी पृष्ठभूमि नौकरियों में से एक को मार दिया गया है। संदेश से बचने के लिए पार्टी की नौकरी नियंत्रण से निकालने के लिए disown का उपयोग करें:

sleep 20 & 
PID=$! 
disown $PID 
kill -9 $PID 
+0

बढ़िया, यह वही है जो मैं चाहता हूं, बहुत बहुत धन्यवाद .. – chemila

+0

अस्वीकार के पास खोलने पर बच्चे को 'SIGHUP' नहीं भेजना खोल है, [यह सवाल] देखें (http://unix.stackexchange.com/प्रश्न/3886/अंतर-बीच-nohup-त्याग देते और)। यहां [उत्तर] है (http://stackoverflow.com/a/5722850/52499)। –

6

यह उपयोग किया जा सकता/dev/बातिल करने के लिए 'प्रतीक्षा' + प्रतीक्षा की पुनर्निर्देशन:

sleep 2 & 
PID=$! 
kill -9 $PID 
wait $PID 2>/dev/null 
sleep 2 
sleep 2 
sleep 2 

यह स्क्रिप्ट होगा

: यदि आप की तरह कुछ का उपयोग करने का प्रयास करें,

-bash-4.1$ ./test 
-bash-4.1$ 

जबकि: नहीं "मार डाला" संदेश देना

यह संदेश उत्पादन होगा:

-bash-4.1$ ./test 
./test: line 4: 5520 Killed     sleep 2 
-bash-4.1$ 

मैं इस समाधान बहुत 'अस्वीकार' है जो अन्य प्रभाव हो सकता है का उपयोग करने से अधिक पसंद है।

आइडिया स्रोत: https://stackoverflow.com/a/5722850/1208218

+0

इसे मार -9 कथन को बदलकर थोड़ा सुधार किया जा सकता है: kill -9 $ PID 2>/dev/null ऐसा इसलिए है क्योंकि हत्या अन्य संदेशों को भी आउटपुट कर सकती है जैसे: लाइन 3: हत्या: (3 9 68) - ऐसी कोई प्रक्रिया स्क्रिप्ट क्या कर रही है इसके आधार पर – Roel

-1

काम सूचनाओं को अक्षम करने के लिए एक और तरीका है एक sh -c 'cmd &' में निर्माण backgrounded जा करने के लिए अपने आदेश डाल करने के लिए है।

#!/bin/bash 

# ... 

sh -c ' 
sleep 20 & 
PID=$! 
kill -9 $PID # >/dev/null 2>&1 
' 

# ... 
-1

मैं पृष्ठभूमि में चल रहे आदेश के आउटपुट को पुनर्निर्देशित करके इसे पूरा करने में सक्षम था।

sleep 20 >>${LOG_FILE} 2>&1 & 

... या यदि आप नहीं करते हैं एक लॉग फ़ाइल चाहते हैं:

sleep 20 &> /dev/null & 

तब, जब आपको लगता है कि पृष्ठभूमि प्रक्रिया 'पीआईडी ​​को मारने के लिए चाहते हैं, यह आपके मामले में यह कैसा दिखेगा मानक बाहर नहीं दिखाओ।

संबंधित मुद्दे