मुझे लगता है कि करता है के बाद एक पार्टी स्क्रिप्ट की जरूरत है:मैं बैश स्क्रिप्ट से प्रक्रिया आईडी और निकास कोड दोनों कैसे प्राप्त कर सकता हूं?
- सभी उत्पादन एक फ़ाइल
- को निर्देश के साथ एक पृष्ठभूमि प्रक्रिया प्रारंभ करता है
- रिटर्न प्रक्रिया के पीआईडी एक फाइल करने के लिए प्रक्रिया के बाहर निकलने के कोड लिखता है (अभी , जब प्रक्रिया निकलती है)। ,
$ executable >>$log 2>&1 & pid=`jobs -p`
या मैं बाहर निकलने के कोड नहीं बल्कि पीआईडी पर कब्जा कर सकते हैं::
- स्क्रिप्ट से बाहर निकलना होगा
मैं पीआईडी नहीं बल्कि बाहर निकलने के कोड प्राप्त कर सकते हैं
$ executable >>$log;
# blocked on previous line until process exits
echo $0 >>$log;
मैं इन सभी को एक ही समय में कैसे कर सकता हूं?
धन्यवाद एक बहुत: चूंकि कि अस्वीकार्य है, यहाँ एक समाधान है कि पढ़ने पर ब्लॉक जब तक पीआईडी फ़ाइल बजाय पाशन नींद करने का मौजूद है। वह बहुत करीब है। मुझे डर है कि मैंने एक और आवश्यकता छोड़ दी। बैश स्क्रिप्ट खत्म होना चाहिए। यदि मैं बैकग्राउंड हेल्पर स्क्रिप्ट में "$ $ pid; echo $? >> $ log" चलाता हूं, तो मुझे "बच्चे नहीं" त्रुटि मिल जाएगी। –
यदि आप बच्चे को समाप्त होने से पहले स्क्रिप्ट से बाहर निकलना चाहते हैं, तो किसी प्रकार की अस्थायी विसंगति के बिना बच्चे के निकास कोड को लिखना संभव नहीं है। –
उप-शेल कोष्ठक में संपूर्ण 'sh -c "($ निष्पादन योग्य"' निकास-स्थिति) 'और 'लपेटें। इससे सबस्केल अपने जीवन के साथ मिल जाता है जबकि माता-पिता को जो कुछ भी करने की ज़रूरत होती है, उसके साथ मिलती है। आप '' 'के बाद एक और '&' जोड़ना चाहेंगे। –