2013-04-25 5 views
10

मेरे पास बैश अभिभावक स्क्रिप्ट है कि अप्रत्याशित इनपुट पर त्रुटि को लॉग करने वाली बाल स्क्रिप्ट लॉगिंग में त्रुटि होती है। मैं भी त्रुटि उत्पन्न होने पर निष्पादन रोकना चाहता हूं और त्रुटि स्क्रिप्ट को बुलाया जाता है। लेकिन अगर मैं त्रुटि प्रबंधन स्क्रिप्ट से exit पर कॉल करता हूं तो यह पैरेंट स्क्रिप्ट निष्पादित करने से नहीं रोकता है। मैं बच्चे से अभिभावक स्क्रिप्ट को रोकने के बारे में कैसे जा सकता हूं?बैश - बाल स्क्रिप्ट से पैरेंट स्क्रिप्ट से बाहर निकलें

उत्तर

10

कोशिश ..

#normal flow 
[[ $(check_error_condition ]] && /some/error_reporter.sh || exit 1 
तो

,

  • जब error_reporter बाहर निकलने की स्थिति के साथ बाहर निकल जाएगा> 0 माता-पिता भी समाप्त कर देगा
  • अगर error_reporter स्थिति के साथ बाहर निकल जाएगा = 0 जनक जारी है ...

आप stop the parent from a child (माता-पिता आमतौर पर इस व्यवहार पसंद नहीं है) :) नहीं करना चाहती, आप के बजाय tell to parent - need stop चाहते हैं और वह खुद बंद हो जाएगा (यदि चाहते हैं);)

0

बच्चे से माता-पिता को समाप्त करने का प्रयास न करें। बच्चे स्क्रिप्ट लौटने के बाद माता-पिता में exit पर कॉल करें।

if [ condition ]; then 
    /path/to/child.sh 
    exit 1 
fi 

या कम

[ condition ] && { /path/to/child.sh; exit 1; } 
6

प्रयास करें:

माता पिता स्क्रिप्ट में:

trap "echo exitting because my child killed me.>&2;exit" SIGUSR1 

में बच्चे रों cript:

kill -SIGUSR1 `ps --pid $$ -oppid=`; exit 

अन्य रास्ता नहीं था:

बच्चे स्क्रिप्ट में:

kill -9 `ps --pid $$ -oppid=`; exit 

लेकिन, यह अनुशंसित नहीं है, क्योंकि माता-पिता की मौत हो रही & बारे में कुछ जानकारी की जरूरत है इस प्रकार यदि आवश्यक हो तो कुछ सफाई करें।


एक और तरीका है

: इसके बजाय बच्चे स्क्रिप्ट, exec यह बुलाने की।


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

+2

यह यहां डरावनी दिखने जैसा दिखता है - बच्चा माता-पिता को मारता है ... :) :) (लेकिन हाँ, यह एक समाधान भी है) :) :) – jm666

+0

^^ युप्स .... मुझे एक बार आवश्यकता थी इस तरह: 'कमांड 1 | (कमांड 2; कमांड 3) 'और कमांड 3 को SIGINT के साथ कमांड 1 मारना था :-) – anishsane

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